3dfier输入数据清单:2D多边形+激光雷达点云的最小数据要求全解析
【免费下载链接】3dfierThe open-source tool for creating 3D models项目地址: https://gitcode.com/gh_mirrors/3d/3dfier
3dfier是一款开源 3D 城市模型生成工具,它能把 2D GIS 数据"3D化":读取 2D 多边形与激光雷达点云,自动把每个多边形提升到三维,最终输出一个无孔洞、无自相交的 watertight 数字表面模型(DSM),支持 CityJSON、CityGML、OBJ 等格式。本文用一份清晰的输入数据清单,帮你搞懂 3dfier 最小数据要求是什么——只需2D 多边形 + 点云 + 一份 YAML 配置,三样缺一不可。
📋 3dfier 输入数据清单:生成3D模型只需3样东西
很多人第一次接触 3dfier 会问:到底要准备什么数据?答案很简单——三类输入:
- 2D 多边形(Polygons):描述要变成 3D 的对象(建筑、道路、水体……)的矢量面数据
- 激光雷达点云(Point Cloud):LAS/LAZ 格式,为多边形提供真实高程信息
- YAML 配置文件:定义读哪些文件、每个文件映射到哪个语义类
下面这张图完整展示了"输入数据 → 提升 → 挤出"的流程:
💡 关键认知:只输出有对应 2D 多边形输入的对象的 3D 数据。如果你没输入地形多边形,3dfier 不会"自动"生成地形。
🗺️ 2D多边形输入要求:支持哪些格式?需要满足什么条件?
支持的文件格式
3dfier 通过GDAL/OGR读取矢量数据,意味着几乎所有 GDAL 支持的格式都能用:Shapefile、GeoPackage、SQLite、GML 等。官方示例数据用的是荷兰 BGT 数据集裁剪出的 SQLite 文件,位于example_data/bgt/目录(如example_data/bgt/bgt_pand.sqlite存放建筑足迹多边形):
多边形必须满足的 4 个条件
| 条件 | 说明 |
|---|---|
| 拓扑连接 | 多边形之间应共用边界、无缝隙无重叠,否则输出的 3D 模型会出现孔洞 |
| 唯一 ID 属性 | 每个要素需有一个唯一标识字段(YAML 中用uniqueid指定,默认fid) |
| 映射到 7 类之一 | Building / Terrain / Forest / Water / Road / Separation / Bridge-Overpass |
| 可选:相对高度字段 | height_field属性描述垂直层次(0=地面,桥梁为 1,隧道为 -1) |
一个补充细节:MultiPolygon(多重多边形)受支持,会被拆分成单个多边形,ID 自动追加id-1、id-2计数器。
多边形与点云的关系,直观看下图——彩色面是 2D 多边形,撒在上面的点是激光雷达数据:
☁️ 激光雷达点云要求:为什么必须区分地面/非地面?
格式要求
点云读取基于 LASLib 库,只支持LAS / LAZ格式。官方示例数据是荷兰 AHN3 点云的裁剪块(example_data/ahn3/ahn3_cropped_1.laz和ahn3_cropped_2.laz):
最低分类要求(重点!)
点云必须按ASPRS 标准 LiDAR 点分类(v1.4)做过分类,最低要求:
- 0-1 类:未分类/从未分类
- 2 类:地面(Ground)
- 3-5 类:植被(Vegetation)
为什么不能省掉分类?3dfier 团队做过充分测试:不分类的点云根本无法稳定工作。主要原因是植被噪声会严重干扰统计分析——树木的点会混入建筑范围,导致屋顶高度被"顶高"、地形出现毛刺。
两个实用技巧:
- ✅ 在 YAML 的
omit_LAS_classes里排除用不到的类别(如植被点),读取速度会大幅提升,还能避免配置错误 - ✅ 用
thinning抽稀点云快速测试配置(正式跑时不建议)
🏠 最小数据配置对比:只建建筑 vs 全部对象
根据目标不同,最小数据要求略有差异。以下是官方给出的两种场景对比:
场景一:只生成 LoD1 建筑
| 需要的数据 | 说明 |
|---|---|
| 建筑足迹多边形 | 1 个数据集即可 |
| 点云(地面 + 非地面分类) | 地面高度用 2 类点计算,屋顶高度用所有类点的高分位数计算 |
场景二:生成区域全部对象
| 需要的数据 | 说明 |
|---|---|
| 拓扑连接的完整面数据 | 水体、地形、道路、建筑、植被、围墙、桥梁 7 类全覆盖 |
| 点云(地面 + 非地面分类) | 地形/植被/道路只用地面点,建筑等用全部点 |
⚠️ 进阶提示:点云分类越精细(如区分了建筑物、屋顶等类别),结果越好——因为配置类别内的噪声更小,建筑高度不会受树木干扰。
✅ 运行前快速检查清单 + 示例数据在哪
打开配置文件example_data/testarea_config.yml对照检查,这份官方示例覆盖了三类输入的所有配置写法:
input_polygons中每个数据集都指定了uniqueid和lifting类名- 每个
lifting类在lifting_options中都有对应配置(例如 Building 配了 ground/roof 分位数) input_elevation指向了正确的 LAS/LAZ 文件- 多边形数据拓扑正确(共边、无缝隙)
在命令行执行即可生成你的第一个 3D 模型:
跑完后会得到example_data/output/testarea.obj(可用 MeshLab 打开)和example_data/output/testarea.json(CityJSON),效果如下:
📚 更多细节可参考项目内文档:最小数据要求见docs/pages/examples/minimal_data_requirements.md,支持的文件格式见docs/pages/getting-started/file_formats.md,输入选项详解见docs/pages/settings/input_options.md。
【免费下载链接】3dfierThe open-source tool for creating 3D models项目地址: https://gitcode.com/gh_mirrors/3d/3dfier
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考