bbox_tile_server/datasource/
pmtiles.rs1use crate::datasource::{
4 wms_fcgi::HttpRequestParams, LayerInfo, SourceType, TileResponse, TileSource, TileSourceError,
5};
6use crate::filter_params::FilterParams;
7use crate::store::pmtiles::PmtilesStoreReader;
8use crate::store::TileReader;
9use async_trait::async_trait;
10use bbox_core::Format;
11use log::debug;
12use tile_grid::{Tms, Xyz};
13use tilejson::tilejson;
14use tilejson::TileJSON;
15
16#[async_trait]
17impl TileSource for PmtilesStoreReader {
18 async fn xyz_request(
19 &self,
20 _tms: &Tms,
21 tile: &Xyz,
22 _filter: &FilterParams,
23 _format: &Format,
24 _request_params: HttpRequestParams<'_>,
25 ) -> Result<TileResponse, TileSourceError> {
26 if let Some(tile) = self
27 .get_tile(tile)
28 .await
29 .map_err(|_| TileSourceError::TileXyzError)?
30 {
31 Ok(tile)
32 } else {
33 Err(TileSourceError::TileXyzError) }
35 }
36 fn source_type(&self) -> SourceType {
37 SourceType::Vector }
39 async fn tilejson(&self, _tms: &Tms, format: &Format) -> Result<TileJSON, TileSourceError> {
40 debug!(
41 "Metadata {}: {}",
42 self.path.display(),
43 self.get_metadata().await?
44 );
45 let mut tj = tilejson! { tiles: vec![] };
46 tj.other
47 .insert("format".to_string(), format.file_suffix().into());
48 Ok(tj)
49 }
50 async fn layers(&self) -> Result<Vec<LayerInfo>, TileSourceError> {
51 Ok(vec![LayerInfo {
52 name: self.path.to_string_lossy().to_string(), geometry_type: None,
54 style: None,
55 }])
56 }
57}