The open geospatial stack converged on PMTiles — a single-file,
range-requestable archive served straight from object storage and read by
MapLibre / pmtiles CLIs / Overture tooling. map's "a tileset is a file,
not a service" is the same idea; emit the incumbent's format so map output
is consumable without a map-specific reader.
New map-pmtiles crate: a self-contained, round-trip-validated PMTiles v3
writer — Hilbert tile-id ordering (z=1 anchors + cross-zoom inverse
verified), the varint clustered directory (delta tile-ids, run-length,
consecutive-offset sentinel), and the 127-byte header. Directories and
metadata written uncompressed (internal compression = none), so no gzip
dep and deterministic bytes. read_tile() reads its own output back
byte-identical for validation.
from_map_tiles filters a tileset to its SURFACE tiles (alt 0, atemporal,
base LOD) — PMTiles' 2-D z/x/y grid can't carry map's altitude/time/LOD
axes (that 4-D coverage is GeoParquet's job). The S2 -> z/x/y projection
is a caller-supplied seam (it lives in map's substrate), keeping this
crate a pure serializer. Note: root-only directory (large tilesets need
leaf dirs); interop with the reference pmtiles libs is the next validation.
4 tests green, clippy clean. Deps: map-schema + serde_json only.
Co-Authored-By: Claude Opus 4.8 <[email protected]>