← back
2026STAC Japan 2026 speaker JAXA 筑波宇宙中心 talk
interactive · stac.surreal.red · overview

PLATEAU 是日本的开放 3D 城市模型计划,到 2025 年度已经有 329 个市町村的模型开放下载。我 2022 年起的本职工作,就是在 Eukarya 做它的官方 viewer 和 CMS。下载很容易,用起来不容易:我住的柏市,光建筑物就是 143 个文件、1.6 GB 的 CityGML。门户本身没有问题——目录整齐、许可清晰、规格标准——问题出在「先下载、再整个解析」这个模式。影视行业有力气硬啃下来,日常的 GIS 工作大多被弹开。

于是做了个个人实验:如果这些建筑物是 cloud-native 的呢?不下载整座城市,从对象存储直接读需要的那个街区,语义完整保留,什么工具都能读。

查了一圈现有方案,「3D 几何 × 语义面 × 云原生范围读取 × 列式分析」这个交叉点是空的。最接近的先行工作 FLATEAU 只保留了 LOD0 的 footprint,理由是 GeoParquet 没有 3D 几何类型——这个被放弃的台阶,正是这次实验站的地方。要说清楚:我什么都没发明,每一块砖都是现成的。

做法是分层,而不是把 Solid 硬塞进 GeoParquet:GeoParquet 放 2D footprint 和属性,44 MB,是发现层,DuckDB 和 QGIS 直接 SQL over HTTP;嵌套 Parquet 放 LOD1 实体和 LOD2 语义面;FlatCityBuf 放完整的 3D 对象——文件内部自带 Hilbert R-tree,和 COG、COPC 是同一个思路,可以叫它「建筑物的 COPC」。结果:同一座城市小了 13 倍,169,223 栋建筑转换零失败;取一个街区的完整 3D,只碰 141 MB 文件的 2.2%,9 次 range 请求。两层还互相跑了基准:投递偏爱面向对象的那层,分析偏爱列式的那层——所以两个都留。整套数据挂在一个合法的 STAC 1.1 目录下,用的全是社区扩展,没有发明方言。

结尾说了句实话:3D 真的值得吗?我自己的模拟跑在 2.5D 棱柱上,精心保留的 LOD2 面一次都没碰。文献的结论是,分水岭在于高度是否准确,而不在屋顶形状。所以默认 2.5D,只在划算的地方按需读 3D——分层恰好让这件事变得便宜。想试的话,DuckDB 里贴一句 SQL 就能直接跑:不用下载,不用 key。