Specification & file format
What CityParquet is, the parts its specification consists of, and where each is defined.
CityParquet is a columnar encoding of the CityGML conceptual model in Apache Parquet. A city model becomes a directory of Parquet files, one row per city object, that can be queried in place on object storage — by feature type, attribute, level of detail, bounding box and 3D geometry — while keeping what is needed to reconstruct the source model. Every file is a standard Parquet file, and where the geometry allows it is also GeoParquet, so footprints open in ordinary GIS tools.
This is version 0.1.0-draft of the specification. Points still undecided are marked 🟡 and link to the open questions. The reasoning behind each rule is in the design decisions.
What the specification consists of
A package is a directory: one object table per CityGML module, optional sidecar files for shared resources, and a STAC Item describing the whole. Each object table stores the geometry of every level of detail in its own WKB column, beside a struct carrying the semantics WKB cannot hold. The pages below define each part, in the order a reader meets them.
The dataset package
The files of a package, their roles, the split by CityGML module, versioning, and what a round trip preserves.
Object table schema
The reserved columns, typed attribute columns and addresses of an object table.
Geometry, LoD & spatial metadata
WKB geometry, surface semantics, the per-LoD columns, the CRS and bbox.
Appearance & implicit geometries
Materials, textures and implicit geometries, and their sidecar files.
Metadata
The city and geo footer metadata, and the metadata.json STAC Item.
Extensions
CityGML ADEs and CityJSON Extensions, and their namespaces.
Mapping from CityGML / CityJSON
Where each source field lands, with one feature traced end to end.