open-standards/map/map-rs/Cargo.toml
Transaction Science 05eaef966d map-pmtiles: PMTiles v3 export (cloud-native tile ecosystem ingest)
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]>
2026-06-25 17:13:49 -04:00

52 lines
1.4 KiB
TOML

[workspace]
resolver = "2"
members = [
"crates/map-schema",
"crates/map-pmtiles",
"crates/map-receipt",
"crates/map-cascade",
"crates/map-index",
"crates/map-tiles",
"crates/map-orbital",
"crates/map-route",
"crates/map-serve",
"crates/map-serve-axum",
"crates/map-conformance",
]
[workspace.package]
version = "0.1.0"
edition = "2021"
license = "Apache-2.0"
repository = "https://github.com/transaction-science/open-standards"
rust-version = "1.85"
[workspace.dependencies]
map-schema = { path = "crates/map-schema" }
map-receipt = { path = "crates/map-receipt" }
map-cascade = { path = "crates/map-cascade" }
map-index = { path = "crates/map-index" }
map-tiles = { path = "crates/map-tiles" }
map-orbital = { path = "crates/map-orbital" }
map-route = { path = "crates/map-route" }
map-serve = { path = "crates/map-serve" }
map-serve-axum = { path = "crates/map-serve-axum" }
axum = "0.7"
tokio = { version = "1", features = ["rt", "rt-multi-thread", "net", "macros"] }
blake3 = "1"
image = { version = "0.25", default-features = false, features = ["png", "webp"] }
flate2 = "1"
chrono = { version = "0.4", features = ["serde"] }
uuid = { version = "1", features = ["v4", "serde"] }
ed25519-dalek = { version = "2", features = ["rand_core"] }
ciborium = "0.2"
serde = { version = "1", features = ["derive"] }
serde_json = "1"
base64 = "0.22"
hex = "0.4"
thiserror = "2"
[workspace.lints.clippy]
all = "warn"