Is your feature request related to a problem? Please describe.
I’m working with vector tiles generated from cadastral data in a custom tile matrix set, specifically based on EPSG:5514 (S-JTSK). The definition I’m using is published here:
🔗 OpenGeoLabs tile matrix sets (in Czech) — it’s the second TMS listed.
Tiles were created using GDAL (which supports custom tiling schemes) and stored in the standard {z}/{x}/{y} structure, served by a basic HTTP server.
I tested pygeoapi’s mvt-proxy plugin using the default Web Mercator TMS, and it works great for my case. However, I would like to serve tiles using my specific S-JTSK TMS.
Describe the solution you'd like
Introduce a new top-level tileMatrixSets: section in the servers part of the YAML configuration file. This would allow users to define one or more custom TMS definitions directly in their config at the beginning and use these TMS in following resources section.
Structure would follow the same format as the current hardcoded tile matrix sets in pygeoapi/models/provider/base.py.
tileMatrixSets:
SJTSKQuad:
tileMatrixSet: SJTSKQuad
tileMatrixSetURI: https://github.com/OpenGeoLabs/tiles-cz/blob/main/03-tile-matrix-set.md
crs: http://www.opengis.net/def/crs/EPSG/0/5514
title: S-JTSK Quad (Czech cadastral)
orderedAxes: [X, Y]
tileMatrices:
- id: 0
scaleDenominator: 7315200
cellSize: 2048.256
cornerOfOrigin: topLeft
pointOfOrigin: [-925000, -920000]
matrixWidth: 1
matrixHeight: 1
tileWidth: 256
tileHeight: 256
- id: 1
scaleDenominator: 3657600
cellSize: 1024.128
cornerOfOrigin: topLeft
pointOfOrigin: [-925000, -920000]
matrixWidth: 2
matrixHeight: 2
tileWidth: 256
tileHeight: 256
# ...
- id: 19
scaleDenominator: 13.95
cellSize: 0.00390673
cornerOfOrigin: topLeft
pointOfOrigin: [-925000, -920000]
matrixWidth: 524288
matrixHeight: 262144
tileWidth: 256
tileHeight: 256
Then, in the provider configuration:
providers:
- type: tile
name: MVT-proxy
data: http://localhost:8000/vector-tiles/parcels/{z}/{x}/{y}.pbf
options:
zoom:
min: 10
max: 14
schemes:
- SJTSKQuad
format:
name: pbf
mimetype: application/vnd.mapbox-vector-tile
Additional context
Where does it make sense to implement it? Currently, custom TMS support seems most relevant for the mvt-proxy plugin (my focus), but may also make sense for WMTS-related use. All tile-related plugins are summed up in the following table:
📦 TMS Usage Across Plugins
| Plugin |
CRS Assumptions |
Custom TMS Support? |
Notes |
| mvt-postgres |
WebMercator and WorldCRS84 |
❓ Unsure |
Not sure if there is any option to use own tiling schemes, probably not? |
| mvt-elastic |
WebMercator only |
❌ Not needed |
CRS is fixed, no custom projection support |
| mvt-tippecanoe |
WebMercator only |
❌ Not needed |
Tippecanoe only supports Web Mercator output |
| mvt-proxy |
Flexible (depends on tile source) |
✅ Makes sense |
Custom CRS and TMS make definitely sense here |
| wmts-facade |
Potentially multiple |
✅ Worth considering |
Would depend on backend support and structure |
I’ve already discussed this idea briefly on the pygeoapi mailing list, but I’d like to follow up here as well to get broader feedback.
I’d really appreciate any input — whether this idea makes sense, potential challenges to be aware of, or hints on how best to approach it within the existing architecture. I’d be happy to start working on an implementation soon if this direction seems reasonable.
Is your feature request related to a problem? Please describe.
I’m working with vector tiles generated from cadastral data in a custom tile matrix set, specifically based on EPSG:5514 (S-JTSK). The definition I’m using is published here:
🔗 OpenGeoLabs tile matrix sets (in Czech) — it’s the second TMS listed.
Tiles were created using GDAL (which supports custom tiling schemes) and stored in the standard {z}/{x}/{y} structure, served by a basic HTTP server.
I tested pygeoapi’s mvt-proxy plugin using the default Web Mercator TMS, and it works great for my case. However, I would like to serve tiles using my specific S-JTSK TMS.
Describe the solution you'd like
Introduce a new top-level tileMatrixSets: section in the servers part of the YAML configuration file. This would allow users to define one or more custom TMS definitions directly in their config at the beginning and use these TMS in following resources section.
Structure would follow the same format as the current hardcoded tile matrix sets in pygeoapi/models/provider/base.py.
Then, in the provider configuration:
Additional context
Where does it make sense to implement it? Currently, custom TMS support seems most relevant for the mvt-proxy plugin (my focus), but may also make sense for WMTS-related use. All tile-related plugins are summed up in the following table:
📦 TMS Usage Across Plugins
I’ve already discussed this idea briefly on the pygeoapi mailing list, but I’d like to follow up here as well to get broader feedback.
I’d really appreciate any input — whether this idea makes sense, potential challenges to be aware of, or hints on how best to approach it within the existing architecture. I’d be happy to start working on an implementation soon if this direction seems reasonable.