A cloud-optimized binary format for storing and retrieving 3D city models
Bringing the semantic richness of CityJSON with the performance of FlatBuffers
π Getting Started β’ π Benchmarks β’ π Documentation β’ π€ Contributing
FlatCityBuf revolutionizes 3D city model storage and retrieval by combining the semantic richness of CityJSON with the performance benefits of FlatBuffers binary serialization and advanced spatial indexing techniques.
Web prototype can be available from here!
fcb_demo.mov
- 3DBAG all (70GB): serialised whole 3DBAG dataset with spatial and attribute indexing
- 3DBAG small (3.4GB)
- Delft (6MB)
Traditional CityJSON formats face significant challenges in large-scale urban applications:
- Slow parsing: Entire files must be loaded and parsed
- Memory intensive: High memory consumption for large datasets
- No spatial queries: Lack of efficient spatial indexing
- Limited cloud support: Poor performance with remote data access
Feature | Benefit |
---|---|
β‘ Zero-copy Access | Access specific city objects without parsing entire files |
βοΈ Cloud Optimized | HTTP range requests for partial data retrieval |
πΊοΈ Spatial Indexing | Packed R-tree for lightning-fast spatial queries |
π Attribute Indexing | Static B+Tree for instant attribute-based filtering |
π Multi-platform | Rust core with WASM bindings for web applications |
FlatCityBuf delivers 10-20Γ faster data retrieval compared to CityJSONTextSequence formats:
Dataset | CityJSON | FlatCityBuf | Speed Improvement | Memory Reduction |
---|---|---|---|---|
3DBAG | 56 ms | 6 ms | 8.6Γ | 4.7Γ less memory |
3DBV | 3.8 s | 122ms | 32.6Γ | 4.5Γ less memory |
Helsinki | 4.0 s | 132ms | 30.6Γ | 2.9Γ less memory |
NYC | 887 ms | 43 ms | 20.7Γ | 4.1Γ less memory |
π Performance: 8.6-256Γ faster queries with 2.1-6.4Γ less memory usage
flatcitybuf/
βββ π¦ fcb_core/ # Core library for reading/writing FlatCityBuf
βββ π οΈ fcb_cli/ # Command-line interface and tools
βββ π fcb_wasm/ # WebAssembly bindings for browsers
βββ π docs/ # Documentation and examples
βββ π§ͺ examples/ # Usage examples and tutorials
- Core: Rust with zero-copy deserialization
- Serialization: FlatBuffers schema with custom optimizations
- Spatial Index: Packed R-tree for efficient range queries
- Attribute Index: Static B+Tree for attribute indexing
- Web Support: WebAssembly bindings via wasm-pack
- CLI: Comprehensive command-line tools
- Rust toolchain (1.83.0 or later)
- wasm-pack (for WebAssembly builds)
Python: Install from PyPI
pip install flatcitybuf
For more details, see PyPI documentation
JavaScript/TypeScript: Install from npm
npm install @cityjson/flatcitybuf
For more details, see npm documentation
# Clone the repository
git clone https://github.com/HideBa/flatcitybuf.git
cd flatcitybuf/src/rust
# Build the core library and CLI
cargo build --workspace --all-features --exclude fcb_wasm --release
# Build WebAssembly module (optional)
cd wasm && wasm-pack build --target web --release --out-dir ../../ts
replace cargo run -p fcb_cli
with fcb
in the following commands if you want to use the binary directly.
# Basic conversion
cargo run -p fcb_cli ser -i input.city.jsonl -o output.fcb
# With compression and indexing options
cargo run -p fcb_cli ser -i data.city.jsonl -o data.fcb
# With spatial index and attribute index
cargo run -p fcb_cli ser -i data.city.jsonl -o data.fcb --attr-index attribute_name,attribute_name2 --attr-branching-factor 256
# Show information about the file
cargo run -p fcb_cli info -i data.fcb
# Core reading benchmarks
cargo bench -p fcb_core --bench read -- --release
- API Documentation - Comprehensive API reference
- MSc thesis at TU Delft - FlatCityBuf was developed by @hideba for his MSc thesis in Geomatics, read all the details!
We welcome contributions from the community! Please see our Contributing Guidelines for details on:
- π Reporting bugs
- π‘ Requesting features
- π§ Submitting pull requests
- π Improving documentation
This project builds upon the excellent work of the geospatial and 3D GIS community:
-
FlatGeobuf - FlatGeobuf team Licensed under BSD 2-Clause License. Provided the foundational spatial indexing algorithms and FlatBuffers integration patterns.
-
CityBuf - 3DBAG organisation Original FlatBuffers schema for CityJSON features, authored by Ravi Peters (3DGI) and BalΓ‘zs Dukai (3DGI).
- CityJSON - For the semantic foundation of 3D city models
- FlatBuffers - Google's cross-platform serialization library
- OGC CityGML - International standard for 3D city models
This project is licensed under the MIT License - see the LICENSE file for details.
The reserach paper has been published on 20th 3D GeoInfo conference in 2025. The paper is publicly availabe on ISPRS achives and its DOI is 10.5194/isprs-archives-XLVIII-4-W15-2025-17-2025
If you use FlatCityBuf in your research, please cite:
@inproceedings{25_3dgeoinfo_fcb,
author = {Baba, Hidemichi and Ledoux, Hugo and Peters, Ravi},
title = {{FlatCityBuf}: {A} new cloud-optimised {CityJSON} format},
booktitle = {Proceedings 20th 3D GeoInfo Conference},
year = {2025},
volume = {XLVIII-4/W15-2025},
pages = {17--24},
address = {Tokyo, Japan},
publisher = {ISPRS},
doi = {10.5194/isprs-archives-XLVIII-4-W15-2025-17-2025}
}