3dfier七大对象类详解:建筑、地形、水体、道路、森林、桥梁的不同3D重建规则

📅 2026/8/27 15:47:37
3dfier七大对象类详解:建筑、地形、水体、道路、森林、桥梁的不同3D重建规则
3dfier七大对象类详解建筑、地形、水体、道路、森林、桥梁的不同3D重建规则【免费下载链接】3dfierThe open-source tool for creating 3D models项目地址: https://gitcode.com/gh_mirrors/3d/3dfier3dfier 是一款开源的 2D GIS 数据转 3D 城市模型工具它的核心思想很直接读取建筑、地形、水体、道路、森林、桥梁等 2D 面数据再结合 LiDAR 点云的高程信息把每个多边形抬升(lifting) 成 3D 对象。整个重建引擎的关键就在于七大对象类——每一类对象都有自己独特的抬升规则和建模方式。这篇文章带你逐个搞懂它们。3dfier 的对象类体系从 2D 多边形到 3D 对象的三种抬升方式在 3dfier 中所有对象都继承自同一个基类TopoFeature定义在 src/TopoFeature.h而TopoFeature之下有三个中间层类决定了对象如何被立起来中间层类含义包含的对象类Flat平面整个对象抬升到单一高度建筑 Building、水体 WaterTIN三角网用内部点云做三角网格保留起伏地形 Terrain、森林 ForestBoundary3D边界抬升仅边界顶点带高程内部保持平面道路 Road、桥梁 Bridge、隔离物 Separation也就是说建筑是平的、地形是起伏的、桥梁是悬浮的——这些差异不是巧合而是由对象类在源码中实现的lift()逻辑决定的。Building建筑唯一支持 LOD 的建筑挤出模型建筑类是整个 3dfier 中最重的一类由 src/Building.cpp 实现它同时处理屋顶高程和地面高程两个百分位percentile屋顶高度默认取顶点附近点的percentile-90用建筑点类LAS class 6 等计算地面高度默认取percentile-10用地面点类LAS class 2、9 等计算lod: 0 / lod: 1lod: 0把建筑建模为贴地平面加竖直侧墙水密闭合lod: 1则从地面挤出(extrusion) 到屋顶高度形成真正的实体盒子floor / inner_walls可控制是否生成建筑底面、是否生成相邻建筑之间的内墙保证模型拓扑正确、完全水密。 当相邻建筑高度不同时3dfier 会在共享墙体上自动插入位于邻居屋顶高度的节点确保两栋建筑之间严丝合缝、无裂缝。Terrain地形把点云雕刻成地面地形类由 src/Terrain.cpp 实现继承自TIN。它是唯一会把原始点云点加入多边形内部的类——因为地形本身就有起伏不能压成一个平面。地形类有三个核心参数simplification随机抽点值越大保留点越少便宜但粗糙simplification_tinsimp基于贪心插入Greedy Insertion的误差控制简化在保证最大偏差不超过设定值如 0.1 米的前提下用尽量少的三角形描述地形innerbuffer靠近边界一定米数内不添加内部点避免边界附近出现尖刺。⚠️simplification和simplification_tinsimp不能同时使用二者选其一即可。Water水体水面永远是平的水体类由 src/Water.cpp 实现继承自Flat。水面的物理直觉很简单——水是平的。因此 3dfier 会把整个水面对象抬升到单一高度默认percentile-10内部不保留任何起伏。它支持use_LAS_classes和use_LAS_classes_within两种点筛选模式后者要求点不仅要在顶点半径范围内还必须落在水体多边形内部能很好地避免岸边植被干扰水面高程。Road道路自带平整化滤波器的道路面道路类由 src/Road.cpp 实现继承自Boundary3D。每个道路顶点都会被抬升到由对应点云计算出的高度但它还有两个独有的整形选项filter_outliers: true通过迭代最小二乘拟合 3D 二次曲面来检测离群点比如误用的树木点只替换被判定为离群的顶点高度flatten: true更进一步把整个道路所有顶点都替换为拟合曲面的值得到一条真正平直顺滑的道路max_outlier_fraction当离群点比例超过该阈值默认 0.2时自动放弃滤波防止误伤。Forest森林目前用地面点代替植被森林类由 src/Forest.cpp 实现继承自TIN参数与地形类完全一致simplification、simplification_tinsimp、innerbuffer。目前 3dfier 还没有理想的植被表示方案因此常规做法是只用地面点重建林下地面而不是还原树冠。也就是说森林面在 3D 模型中呈现为带起伏的地面——这保证了森林区域与周围地形平滑衔接。Bridge/Overpass桥梁会悬空的智能对象桥梁类由 src/Bridge.cpp 实现是规则最复杂的一类。桥梁的特殊性在于它的某些边要悬空跨越河流、道路另一些边要缝合到邻接地面。3dfier 会自动判断哪些顶点应该与相邻对象缝合、哪些顶点应当跳过而保持悬浮避免桥梁被错误地埋进地面或悬在半空。同时道路类的二次曲面拟合逻辑会始终应用于桥梁可选再叠加flatten让桥面更平整。Separation隔离物BGT 数据中的墙这是文档中常被忽略的第七类。隔离物类由 src/Separation.cpp 实现继承自Boundary3D默认抬升到percentile-80高度。它源自荷兰 BGT 数据集的墙类对象——围墙、护坡墙等顶部平坦的墙状物体。如果你的数据源里没有这类对象可以在配置中直接省略该类。如何把 2D 数据分配给七大对象类在 3dfier 中对象类的分配通过 YAML 配置文件的lifting字段完成。以示例配置 example_data/testarea_config.yml 为例其逻辑是数据集BGT 图层lifting 分配bgt_pand房屋Buildingbgt_waterdeel水体Waterbgt_onbegroeidterreindeel无植被地表Terrainbgt_begroeidterreindeel植被地表Forestbgt_wegdeel道路面Roadbgt_overbruggingsdeel桥梁Bridge/Overpassbgt_scheiding隔离墙Separation每类对象的具体抬升参数高度百分位、LAS 点类、LOD、滤波开关等则集中在lifting_options段配置完整的参数说明可参考项目文档 docs/pages/settings/lifting_options.md。小结一张表记住七大对象类的 3D 重建规则对象类3D 建模方式最有辨识度的规则Building挤出实体LOD 0/1屋顶/地面双百分位 水密侧墙Terrain三角网 TINtinsimp 误差控制 内部点云Forest三角网 TIN同地形用地面点代替植被Water单一高程平面水面整体抬升到平Road边界抬升二次曲面滤波 可选平整化Bridge/Overpass边界抬升自动判断悬空边与缝合边Separation边界抬升墙状物体默认 percentile-80理解这七大对象类你就掌握了 3dfier 的配置核心数据决定对象类对象类决定重建规则。接下来只需准备一份包含多边形和点云的数据就能复现出文末那样完整的 3D 城市模型。【免费下载链接】3dfierThe open-source tool for creating 3D models项目地址: https://gitcode.com/gh_mirrors/3d/3dfier创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考