11//! Encode row-oriented [`TileLayer`]s as MVT (Mapbox Vector Tile) bytes,
22//! delegating wire-format details to the [`fast_mvt`] crate.
33
4- use fast_mvt:: { DEFAULT_EXTENT , MvtExtent , MvtTileBuilder , MvtValue } ;
4+ use fast_mvt:: { MvtTileBuilder , MvtValue } ;
55
66use crate :: decoder:: { PropValue , TileLayer } ;
77use crate :: { MltError , MltResult } ;
@@ -13,15 +13,13 @@ pub fn tile_layers_to_mvt(layers: Vec<TileLayer>) -> MltResult<Vec<u8>> {
1313 if layer. name . is_empty ( ) {
1414 return Err ( MltError :: MissingLayerName ) ;
1515 }
16- let extent = MvtExtent :: new ( layer. extent ) . unwrap_or ( DEFAULT_EXTENT ) ;
1716 let mut mvt_layer = tile. layer_with_capacity ( layer. name , layer. features . len ( ) ) ?;
18- mvt_layer. extent ( extent) ;
19- let names = layer. property_names ;
17+ mvt_layer. extent ( layer. extent . into ( ) ) ;
2018 for feat in layer. features {
2119 let mut feature = mvt_layer. feature ( feat. geometry ) ?;
2220 feature. id ( feat. id ) ;
2321 for ( col_idx, prop) in feat. properties . into_iter ( ) . enumerate ( ) {
24- if let Some ( name) = names . get ( col_idx)
22+ if let Some ( name) = layer . property_names . get ( col_idx)
2523 && let Ok ( value) = MvtValue :: try_from ( prop)
2624 {
2725 feature. tag ( name, value) ?;
@@ -57,7 +55,7 @@ impl TryFrom<PropValue> for MvtValue {
5755#[ cfg( test) ]
5856mod tests {
5957 use super :: * ;
60- use crate :: decoder:: TileFeature ;
58+ use crate :: decoder:: { Extent , TileFeature } ;
6159 use crate :: mvt:: mvt_to_tile_layers;
6260
6361 #[ test]
@@ -71,8 +69,9 @@ mod tests {
7169 fn rejects_empty_layer_name ( ) {
7270 let layer = TileLayer {
7371 name : String :: new ( ) ,
74- extent : 4096 ,
72+ extent : Extent :: new ( 4096 ) . unwrap ( ) ,
7573 property_names : vec ! [ ] ,
74+ property_kinds : vec ! [ ] ,
7675 features : vec ! [ ] ,
7776 } ;
7877
@@ -94,20 +93,24 @@ mod tests {
9493 ( 0 , 10 ) . into( ) ,
9594 ( 0 , 0 ) . into( ) ,
9695 ] ;
97- let layer = TileLayer {
98- name : "L" . into ( ) ,
99- extent : 4096 ,
100- property_names : vec ! [ ] ,
101- features : vec ! [ TileFeature {
96+ let layer = TileLayer :: from_parts (
97+ "L" ,
98+ 4096 ,
99+ vec ! [ ] ,
100+ vec ! [ TileFeature {
102101 id: Some ( 1 ) ,
103102 geometry: Geometry :: Polygon ( Polygon :: new( LineString ( ring) , vec![ ] ) ) ,
104103 properties: vec![ ] ,
105104 } ] ,
106- } ;
105+ )
106+ . unwrap ( ) ;
107107 let bytes = tile_layers_to_mvt ( vec ! [ layer] ) . unwrap ( ) ;
108108 let back = mvt_to_tile_layers ( bytes) . unwrap ( ) ;
109- let Geometry :: Polygon ( p) = & back[ 0 ] . features [ 0 ] . geometry else {
110- panic ! ( "expected polygon, got {:?}" , back[ 0 ] . features[ 0 ] . geometry) ;
109+ let Geometry :: Polygon ( p) = back[ 0 ] . features ( ) [ 0 ] . geometry ( ) else {
110+ panic ! (
111+ "expected polygon, got {:?}" ,
112+ back[ 0 ] . features( ) [ 0 ] . geometry( )
113+ ) ;
111114 } ;
112115 assert_eq ! ( p. exterior( ) . 0 . len( ) , 5 ) ;
113116 assert_eq ! ( p. exterior( ) . 0 . first( ) , p. exterior( ) . 0 . last( ) ) ;
0 commit comments