ovtile/base/
vector_tile.rs

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