3dfier输出流程深入解析:一个三维模型如何被写入CityGML、IMGeo与PostGIS
3dfier输出流程深入解析一个三维模型如何被写入CityGML、IMGeo与PostGIS【免费下载链接】3dfierThe open-source tool for creating 3D models项目地址: https://gitcode.com/gh_mirrors/3d/3dfier3dfier 是一款开源的三维城市建模工具它读取 2D GIS 数据建筑轮廓、点云并3dfy生成三维模型。本文带你深入 3dfier 的输出流程看懂一个三维模型是如何被依次写入 CityGML、CityJSON、IMGeo、PostGIS、OBJ、CSV 等 15 种格式的适合刚接触 3dfier 的新手快速建立全局认知。一条命令触发多格式输出3dfier 的输出格式不是写在配置文件里而是通过命令行参数逐一启用的。每个输出选项都对应一个目标路径程序会迭代遍历所有已定义的输出格式逐个生成。常用入口定义在 src/main.cpp 中输出选项说明--CityGML/--CityGML-Multifile单文件 / 多文件 CityGML--CityGML-IMGeo/--CityGML-IMGeo-Multifile荷兰 IMGeo 扩展格式--CityJSON带属性的 CityJSON--PostGIS/--PostGIS-PDOK/--PostGIS-PDOK-CityGML写入 PostGIS 数据库--OBJ/--OBJ-NoID/--STL网格/表面模型--Shapefile/--GDAL任意 GDAL 矢量格式--CSV-BUILDINGS等 3 个变体建筑高度统计例如最常见的两种用法3dfier config.yml --OBJ myoutput.obj 3dfier config.yml --CityGML myoutput.gml 3dfier config.yml --PostGIS PG:host... user... dbname...模型最终包含哪些要素由配置文件中的allowed_features决定共 7 类要素见 src/definitions.h 中的TopoClass枚举Building、Water、Terrain、Road、Forest、Separation、Bridge/Overpass。写入流程的核心要素驱动的格式决策上图来自 docs/pages/architecture/output_flow.md是理解整个输出模块的关键。核心思路是遍历每一个三维要素Building、Terrain 等而不是遍历格式根据当前输出的目标格式对同一份内存中的模型做不同粒度的几何表达——比如建筑在 CityGML 里是 LoD1 实体Solid在 OBJ 里是三角化的多表面MultiSurface属性如楼层高度min height surface、屋面高度measuredHeight只在支持的格式中写出。这种一份模型、多种表达的设计让所有格式共享同一套几何与属性数据避免了重复计算。CityGML 输出LoD1 实体与三角化两种形态CityGML 是 3dfier 最核心的输出格式。建筑默认被写成LoD1 Solid有体积的实体并附带两个高度属性两个配置项会改变写入形态triangulation: true→ 建筑写成三角化 MultiSurface而非 LoD1 实体floor: true→ 模型中额外包含楼层面多边形。效果对比一目了然GML 的 XML 头与命名空间由 src/io.cpp 中的get_xml_header、get_citygml_namespaces等函数生成LoD1 块体的几何则通过get_extruded_lod1_block_gml拉伸写出。IMGeo面向荷兰地政体系的 CityGML 扩展IMGeo是 CityGML 的一个应用域扩展ADE由荷兰政府采用大量官方数据集都使用该格式。它的流程与 CityGML 几乎一致但有两点关键差异LoD0 的楼板与屋顶面不写入数据模型中不保留拥有专有的属性字段程序会把输入数据中的对应元数据复制到正确的 IMGeo 输出属性上。因此如果你处理的是荷兰的 BGT 建筑数据如 example_data/bgt/ 下的样例库--CityGML-IMGeo是与本地 GIS 系统对接的首选。写入 PostGIS 数据库与 GDAL 格式共享一套代码PostGIS 输出复用了 GDAL 格式的特性/几何/属性构建代码二者的区别在于数据落点GDAL 文件格式每个图层创建一个数据集一个文件PostGIS创建单一数据集数据库其中包含多个图层。入口实现是 src/Map3d.cpp 中的get_postgis_output通过 GDAL 的PostgreSQL驱动打开连接串逐要素类建图层并写入。注意它要求GDAL ≥ 2.0需要 MultiPolygonZ 支持否则程序会直接报错退出。三个变体对应不同目标模式PostGIS通用、PostGIS-PDOK荷兰 PDOK 地政模式、PostGIS-PDOK-CityGMLPDOK CityGML 语义。写入数据库后的成果可以直接在 GIS 平台中查询、叠加分析其他常用格式速览CityJSON与 OBJ 流程类似但支持 Solid 与属性。建筑写成 LoD1 Solid其他要素为 MultiSurface并携带min height surface与measuredHeight属性。OBJ仅支持 MultiSurface。建筑同时支持 LoD0/LoD1通过小技巧用o命名IDusemtl材质名来携带语义标签如usemtl Terrain样例输出见 example_data/output/。CSV面向建筑统计的宝藏格式提供三档精度——单百分位、多百分位楼板 0/10/20/30/40/50屋顶 0/10/25/50/75/90/95/99、全部高程值。Shapefile / GDAL--GDAL可指定任意 GDAL 驱动名输出。快速上手输出你的第一个模型配合 example_data/testarea_config.yml 与 example_data/ 中自带的 AHNL 点云.laz和 BGT 矢量数据一条命令即可复现示例成果3dfier example_data/testarea_config.yml \ --OBJ example_data/output/testarea.obj \ --CityGML example_data/output/testarea.gml \ --PostGIS PG:hostlocalhost userme dbname3dfier小结3dfier 的输出模块以一份内存模型 格式决策流程为中心命令行决定写哪些格式每个要素按格式规则表达几何与属性文件类格式走 GDAL 流程PostGIS 则共享同一套代码写入数据库。理解上面那张总流程图就掌握了 CityGML、IMGeo 与 PostGIS 三种关键输出的全部脉络。更多细节可参考官方文档 docs/pages/architecture/output_flow.md 与 docs/pages/settings/output_options.md。【免费下载链接】3dfierThe open-source tool for creating 3D models项目地址: https://gitcode.com/gh_mirrors/3d/3dfier创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
