CityGML程序化建模

在攻读博士学位期间,我在 3D GIS 研究中遇到了以下缺点:

  • 包含多个细节级别的 CityGML 数据集很少。
  • 不存在程序化生成的 CityGML 格式的数据。
  • 没有免费的程序化建模引擎。
  • 公开可用的 CityGML 模型通常包含大量(拓扑)错误。

为了解决这些问题,我开发了 Random3Dcity,这是一个基本的实验性开源程序建模引擎,用于自动构建合成建筑及其在 CityGML 中的多个 LOD 中的实现。 我在博士项目中将生成的数据集用于多种目的,例如对用例中使用特定 LOD 的性能进行基准测试,但可能的应用并不限于此。 特此,我弥合了差距并公开发布了数据集。 引擎的代码也已发布。

除了这个项目之外,我还为 3D 城市模型设计了一种新的 LOD 规范,该规范扩展了 CityGML 中的规范。 该规范已通过该引擎实现。

凭借其多样化的建筑物和大量的表示,Random3Dcity 的目标是成为可用的最完整的 CityGML(可能还有 3D)数据集。 然而,请注意其局限性,例如实验性质和合成结果。

1、从随机参数描述到多种表示形式的 CityGML

Random3Dcity 由两部分组成。

第一个构建具有随机属性(程序化建模器)的建筑物,例如高度、屋顶类型和窗户数量及其尺寸。

做到这一点的算法相对聪明,它通过遵守大量约束(例如窗户不重叠)来实现这一点,并注意设计的建筑物看起来尽可能真实。 引擎将这些数据存储在人类可读的参数描述(自己的 XML 模式)中,例如: <roofType>Gabled</roofType><h>2.89</h>

由于这种随机性,数据集非常适合作为无偏差数据源进行许多分析,并适合重新创建现实世界数据中可能不可用的许多不同场景。 按照目前的配置,不同建筑物的数量约为 1054 座。

引擎的第二部分读取这些数据,并通过生成多个详细级别的 CityGML 文件以 3D 形式实现它们。

以下出版物描述了该方法:使用程序建模引擎 Random3Dcity 在 CityGML 中生成多 LOD 3D 城市模型

2、更精细的 LOD划分

作为博士研究的目标之一,我开发了一种新规范,将 CityGML LOD 规范细化为 16 个 LOD,即适合当前每个 LOD 0、1、2 和 3 的四个不太模糊且详细指定的变体,旨在 补充 CityGML 规范。它们是对 3D 制作工作流程进行彻底研究、与从业者接触以及检查现有 3D 模型的产物。

上图显示了规范的直观描述,下面显示了包含 100 座建筑物的数据集的四个 LOD 的组合。


详细规范发布于:改进的 3D 建筑模型的 LOD 规范

3、楼层内部实体

Random3Dcity 能够生成三个细节级别的基本内部:每层一个实体,整个建筑物一个实体(从外壳偏移),以及每个楼层一个 2D 多边形。 例如,这些实体可以用作构建体积计算的地面实况模型。

该引擎生成一些内部参数,例如托梁和墙壁厚度,并计算实体的几何形状。

4、多个几何参考

每座建筑物均以多个细节级别生成(共 16 个)。 此外,它们也是在多个几何参考中生成的(例如,LOD1 块模型顶部的不同高度)。

在下面,你可以看到 LOD1 块模型的七个变体,涉及顶面所使用的几何参考。

此外,覆盖区使用了不同的参考:实际覆盖区和屋顶边缘的投影。 这也适用于 LOD2 模型。

以下出版物描述了该主题:3D 建筑模型 LOD 的变体及其对空间分析的影响

5、引擎生成的 CityGML 数据集示例

截至 2015 年 3 月 11 日的版本(Random3Dcity v. 0.1.4)。 所有数据集包含 900 座建筑物。 下载数据之前请阅读附加信息。 如果你使用这些数据来准备一份出色的出版物,请引用以下论文:使用程序建模引擎 Random3Dcity 在 CityGML 中生成多 LOD 3D 城市模型


如果你不愿意下载代码源并自己生成数据集,这里我准备了示例 CityGML 数据的压缩集合。 该 zip 还包含使用我的工具 CityGML2OBJs 生成的 OBJ 文件,如果需要转换为其他格式的3D模型,可以使用这个在线的3D格式转换工具

下面给出了每个表示的描述。

详细程度 几何参考 Brep 或solid 文件名 注释
LOD0.1 实际占地 Brep LOD0_1_F0_H3.gml 仅包含占地空间
LOD0.2 实际占地,屋顶一半高度 Brep LOD0_2_F0_H3.gml 包含占地空间和屋顶边缘多边形
LOD0.3 实际占地,独立高度 Brep LOD0_3_F0_H3.gml 包含占地空间和屋顶边缘多边形
LOD1.1 实际占地,屋顶半高处的高度 Brep LOD1_1_F0_H3.gml
LOD1.2 实际占地,屋顶半高处的高度 Brep LOD1_2_F0_H3.gml
LOD1.2 占地从屋顶边缘偏移20 厘米 Solid LOD1_2_Fd_H5_solid.gml 不同的占地(偏移)
LOD1.3 实际占地,屋顶半高处的高度 Solid LOD1_3_F0_H3_solid.gml
LOD2.0 实际占地 Brep LOD2_0_F0.gml
LOD2.0 实际占地 Brep LOD2_0_F0_S0.gml 无语义
LOD2.1 实际占地 Brep LOD2_1_F0.gml
LOD2.2 实际占地 Brep LOD2_2_F0.gml
LOD2.2 实际占地 Brep LOD2_2_F0_S0.gml 无语义
LOD2.2 从屋顶边缘投影 Brep LOD2_2_F1.gml
LOD2.3 实际足迹 Brep LOD2_3_F0.gml
LOD3.0 墙壁从屋顶边缘投影 Brep LOD3_0.gml 空中要素
LOD3.1 不适用 Brep LOD3_1.gml 陆地特征
LOD3.2 不适用 Brep LOD3_2.gml
LOD3.2 不适用 Brep LOD3_2_S0.gml 无语义
LOD3.3 不适用 Brep LOD3_3.gml 非常详细的模型(系列中最好的)
LOD3.3 不适用 Brep LOD3_3_S0.gml 无语义
Interior-LOD0 不适用 Brep Interior-LOD0.gml 每层一个多边形
Interior-LOD1 不适用 Brep Interior-LOD1.gml 建筑物的一个实体
Interior-LOD2 不适用 Brep Interior-LOD2_2.gml 每层一个实体

备注和未来的工作

  • 可以使用我的工具 CityGML2OBJs 将此数据转换为 OBJ,如果需要转换为其他格式的3D模型,可以使用这个在线的3D格式转换工具
  • 所有 <gml:LinearRing><gml:Polygon> 都有一个 <gml:id>,它是随机生成的 (UUID)。
  • _S0.gml 结尾的数据集不包含语义区分的表面。
  • 坐标系是局部的。
  • 数据符合 CityGML 2.0。

该引擎的完整产品包含更多带有改组变体的数据集(更准确地说是 392 个)。 例如,并非所有带有高度的 LOD1 变体都放在这里。 如果你需要其他变体,请与我联系,或使用提供的代码生成它们。

6、错误的数据集(故意)

已经创建了一个辅助引擎来模拟上述原始数据集的采集错误。 该数据适合错误传播分析(例如,请参阅我的相关论文)。 此外,由于某些文件中的拓扑可能会损坏,因此其使用可能会扩展到其他领域,例如测试验证和修复工具。

6.1 位置误差

LOD 分布误差 错误数据集 注释
LOD1 σ = 0.0 m (GT) LOD1-F1H1 [5.7MB] Solid
σ = 0.2 m LOD1-F1H1-0.2 [5.7MB] Solid
LOD2 σ = 0.0 m (GT) LOD2-F1 [8.7MB] Brep
σ = 0.2 m LOD2-F1-0.2 [8.7MB] Brep
LOD3 σ = 0.0 m (GT) LOD3 [81.4MB] Brep
σ = 0.2 m LOD3-0.2 [81.4MB] Brep

注意:

  • 误差相当于 ISO 19157 空间数据质量元素位置精度。
  • 假设不存在不确定性的空间相关性。
  • 所有坐标的不确定性都相同。 垂直 (z) 坐标不单独处理。

6.2 重叠的对象

重叠的对象是不需要的。 因此,这些数据集也可能有助于测试验证和修复软件。 以下数据集包含在多个 LOD 中重叠的建筑物。

LOD 错误数据集 注释
LOD2 LOD2-重叠 [519kB] Brep
LOD3 LOD3-重叠 [5.2MB] Brep

6.3 不明确的语义

这些数据集包含打乱的语义表面和/或缺失的语义类。 表面的语义是统一随机的(以下各为 1/3:GroundSurface、RoofSurface、WallSurface)。

LOD 错误数据集 注释
LOD2 LOD2-F1-任意语义 [2.2MB] Brep
LOD3 LOD3-任意语义 [21.2MB] Brep, 门窗缺失(用 3 个类代替)

6.4 严重的拓扑错误

以下 LOD3 数据集包含拓扑错误,例如破碎的实体和内部位于其外部的多边形。

LOD 错误数据集 注释
LOD3 LOD3-错误拓扑 [21MB] Brep, 大多数错误都是外围窗口
LOD3 LOD3_solid-error-topology [1.9MB] Solid, 大多数错误是屋顶尖端自重叠

原文链接:Synthetic CityGML data and procedural modelling engine

BimAnt翻译整理,转载请标明出处