open_vector_tile/base/
vector_tile.rs

1use crate::{
2    VectorLayer, VectorTile, base::BaseVectorLayer, mapbox::vector_tile::MapboxVectorTile,
3};
4use alloc::{collections::BTreeMap, string::String};
5
6/// Base Vector Tile
7/// This is an intermediary for storing feature data in the Open Vector Tile format.
8/// Convert from either a Mapbox vector tile or GeoJSON data.
9#[derive(Debug, Default)]
10pub struct BaseVectorTile {
11    /// the layers in the tile that hold features
12    pub layers: BTreeMap<String, BaseVectorLayer>,
13}
14impl BaseVectorTile {
15    /// Add a new layer to the tile
16    pub fn add_layer(&mut self, layer: BaseVectorLayer) {
17        self.layers.insert(layer.name.clone(), layer);
18    }
19}
20impl From<&mut VectorTile> for BaseVectorTile {
21    /// Convert from Mapbox vector tile
22    fn from(vector_tile: &mut VectorTile) -> Self {
23        let mut tile = BaseVectorTile { layers: BTreeMap::new() };
24        for (name, layer) in vector_tile.layers.iter_mut() {
25            if let VectorLayer::Mapbox(layer) = layer {
26                tile.layers.insert(name.clone(), layer.into());
27            }
28        }
29        tile
30    }
31}
32impl From<&mut MapboxVectorTile> for BaseVectorTile {
33    /// Convert from Mapbox vector layer
34    fn from(vector_tile: &mut MapboxVectorTile) -> Self {
35        let mut tile = BaseVectorTile { layers: BTreeMap::new() };
36        for (name, layer) in vector_tile.layers.iter_mut() {
37            tile.layers.insert(name.clone(), layer.into());
38        }
39        tile
40    }
41}