CityGML程序化建模开源引擎及数据集

news2025/1/11 14:01:46

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

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

在这里插入图片描述

推荐:用 NSDT编辑器 快速搭建可编程3D场景

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

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

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

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

Random3Dcity 由两部分组成。

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

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

由于这种随机性,数据集非常适合作为无偏差数据源进行许多分析,并适合重新创建现实世界数据中可能不可用的许多不同场景。 按照目前的配置,不同建筑物的数量约为 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实际占地BrepLOD0_1_F0_H3.gml仅包含占地空间
LOD0.2实际占地,屋顶一半高度BrepLOD0_2_F0_H3.gml包含占地空间和屋顶边缘多边形
LOD0.3实际占地,独立高度BrepLOD0_3_F0_H3.gml包含占地空间和屋顶边缘多边形
LOD1.1实际占地,屋顶半高处的高度BrepLOD1_1_F0_H3.gml
LOD1.2实际占地,屋顶半高处的高度BrepLOD1_2_F0_H3.gml
LOD1.2占地从屋顶边缘偏移20 厘米SolidLOD1_2_Fd_H5_solid.gml不同的占地(偏移)
LOD1.3实际占地,屋顶半高处的高度SolidLOD1_3_F0_H3_solid.gml
LOD2.0实际占地BrepLOD2_0_F0.gml
LOD2.0实际占地BrepLOD2_0_F0_S0.gml无语义
LOD2.1实际占地BrepLOD2_1_F0.gml
LOD2.2实际占地BrepLOD2_2_F0.gml
LOD2.2实际占地BrepLOD2_2_F0_S0.gml无语义
LOD2.2从屋顶边缘投影BrepLOD2_2_F1.gml
LOD2.3实际足迹BrepLOD2_3_F0.gml
LOD3.0墙壁从屋顶边缘投影BrepLOD3_0.gml空中要素
LOD3.1不适用BrepLOD3_1.gml陆地特征
LOD3.2不适用BrepLOD3_2.gml
LOD3.2不适用BrepLOD3_2_S0.gml无语义
LOD3.3不适用BrepLOD3_3.gml非常详细的模型(系列中最好的)
LOD3.3不适用BrepLOD3_3_S0.gml无语义
Interior-LOD0不适用BrepInterior-LOD0.gml每层一个多边形
Interior-LOD1不适用BrepInterior-LOD1.gml建筑物的一个实体
Interior-LOD2不适用BrepInterior-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 mLOD1-F1H1-0.2 [5.7MB]Solid
LOD2σ = 0.0 m (GT)LOD2-F1 [8.7MB]Brep
σ = 0.2 mLOD2-F1-0.2 [8.7MB]Brep
LOD3σ = 0.0 m (GT)LOD3 [81.4MB]Brep
σ = 0.2 mLOD3-0.2 [81.4MB]Brep

注意:

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

6.2 重叠的对象

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

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

6.3 不明确的语义

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

在这里插入图片描述

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

6.4 严重的拓扑错误

以下 LOD3 数据集包含拓扑错误,例如破碎的实体和内部位于其外部的多边形。
在这里插入图片描述

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

原文链接:CityGML程序化建模 — BimAnt

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/878019.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ME3116电源小板

最近设计一款PCB的时候使用微盟的dc dc电源ic踩了一个坑。 在使用me3116作为24v到5v的降压ic作为esp32系统前级的降压电路时,再没有铂电阻采样负载的情景下工作正常,带上负载后,ic工作不正常,过一段时间,后级电路会烧…

BBR拥塞控制算法 v3

BBR (Bottleneck Bandwidth and Round-trip propagation time) 是谷歌在 2016 年发布的一套拥塞控制算法。它尤其适合在存在一定丢包率的弱网环境下使用。比如谷歌就通过 BBR 让内部和外部的网络能够以更高吞吐量和更低延迟更高效地运行。在这类环境下,BBR 的性能远…

visual studio 2017 运行的程序关闭后不能再运行?(visual studio建立项目之后退出,如何再次完整打开项目?)

在你储存项目的文件夹里面应该是这样的 里面.vcxproj后缀名的就是原来创建的项目,直接打开这个头文件源文件就会一起出来了! 真的管用,亲测有效。

el-calendar的样式修改使用记录

效果图与element原图 el-calendar的尺寸 el-calendar的大小是根据内部每一个日历块进行决定的 .el-calendar-day {height: 47px !important;border: none;text-align: center;padding: 0;} 右上角的上月下月,取消显示今天的css // 今天按钮隐藏.el-button-group …

2009年下半年 软件设计师 上午试卷

博主介绍:✌全网粉丝3W,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经验…

新增守护进程管理、支持添加MySQL远程数据库,支持PHP版本切换,1Panel开源面板v1.5.0发布

2023年8月14日,现代化、开源的Linux服务器运维管理面板1Panel正式发布v1.5.0版本。 在这个版本中,1Panel新增了守护进程管理功能;支持添加MySQL远程数据库;支持添加FTP/S和WebDAV的SFTP服务;支持PHP版本切换。此外&am…

从零开始,快速打造租车服务小程序的分享

随着移动互联网的发展,小程序成为了企业推广和服务的重要手段之一。租车服务行业也不例外,通过打造一款租车服务小程序,企业可以更好地与用户进行互动和交流,提供更方便快捷的租车服务。本文将介绍如何利用第三方制作平台/工具快速…

ORB-SLAM2学习笔记7之System主类和多线程

文章目录 0 引言1 整体框架1.1 整体流程 2 System主类2.1 成员函数2.2 成员变量 3 多线程3.1 ORB-SLAM2中的多线程3.2 加锁 0 引言 ORB-SLAM2是一种基于特征的视觉SLAM(Simultaneous Localization and Mapping)系统,它能够从单个、双目或RBG…

理解jvm之对象已死怎么判断?

目录 引用计数算法 什么是引用 可达性分析算法(用的最多的) 引用计数算法 定义:在对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加一;当引用失效时,计数器值就减一&#xff1…

用ngrok实现内网穿透,一行命令就搞定!

最近在写支付的东西,调试时候需要让支付平台能够回调本地接口来更新支付成功的状态。但由于开发机器没有公网IP,所以需要使用内网穿透来让支付平台能够成功访问到本地开发机器,这样才能更高效率的进行调试。 推荐内网穿透的文章已经很多很多…

Stable Diffusion 插件开发经验

Stable Diffusion近来大热,但是插件开发的资料少之又少。 这里提供一些插件开发的经验,可供参考。 1.替换启动页。 如果你想要在运行Stable Diffusion的基础上想要一些独有的操作,不想要进行裁剪,直接替换启动页面,那么就需要在webui中进行替换 这里modules.ui.create_ui…

FPGA通过MIG IP读写DDR3

一. 简介 本期将接收如何驱动DDR3存储器,当然不会像SDRAM那样,自己手写驱动;而是借助Vivado提供的MIG IP来完成这项工作。但是建议在学习DDR3之前,可以学习一下且写一下SDRAM的驱动,因为它们的涉及到的存储原理和框架…

THUDM/chatglm2-6b-int4体验

在gpu下 gpu: Telsa T4 资源消耗:RAM大概4G,GPU显存大概6G # 安装transformers等包 !pip install protobuf transformers4.30.2 cpm_kernels torch>2.0 gradio mdtex2html sentencepiece accelerate# 导入AutoTokenizer, AutoModel from…

react 09之状态管理工具1 redux+ react-thunk的使用实现跨组件状态管理与异步操作

目录 react 09之状态管理工具1 redux react-thunk的使用实现跨组件状态管理与异步操作store / index.js store的入口文件index.js 在项目入口文件 引入store / actionType.js 定义action的唯一标识store / reducers / index.jsstore / actions / form.jsstore / reducers / for…

关于PMP中的敏捷知识

在此次改版中,题目中增加了大量的敏捷题型,总体比重仍然很高,据我的主观感觉,达到了1/3。与ACP认证相比,PMP对敏捷管理技术的考察相对简单,考察路径也较为集中,主要聚焦于以下两个方面&#xff…

Python-OpenCV中的图像处理-图像特征

Python-OpenCV中的图像处理-图像特征 图像特征Harris角点检测亚像素级精度的角点检测Shi-Tomasi角点检测SIFT(Scale-Invariant Feature Transfrom)SURF(Speeded-Up Robust Features) 图像特征 特征理解特征检测特征描述 Harris角点检测 cv2.cornerHarris(img, blockSize, ks…

Nodejs 第十一章(CSR SSR SEO)

概述 在上一章的时候我们说过在node环境中无法操作DOM 和 BOM,但是如果非要操作DOM 和 BOM 也是可以的我们需要使用第三方库帮助我们jsdom npm i jsdomjsdom 是一个模拟浏览器环境的库,可以在 Node.js 中使用 DOM API 简单案例 const fs require(no…

mfc140u.dll丢失的解决方法-mfc140u.dll是什么文件

在使用计算机过程中,我们经常会遇到各种错误提示和问题,其中一个常见的问题是与mfc140u.dll文件有关的错误。mfc140u.dll是Microsoft Foundation Classes(MFC)的一个动态链接库文件,它提供了许多用于开发Windows应用程序的函数和类。 当mfc1…

不同模块之间解决service层与dao层无法注入的问题

方法一(建议): 方法一是导入其它模块的dao层与service层完成自动注解的问题 方法二: 指定扫码哦基础包,不推荐该方法额原因是因为扫描这么多包 而且每个模块的配置类之间可能存在冲突

CSDN热榜分析:来看看热榜都在写什么

文章目录 数据爬取词云制作滤除停用词 数据爬取 热榜地址是https://blog.csdn.net/rank/list,先进去再说 from selenium import webdriver from selenium.webdriver.common.by import By url https://blog.csdn.net/rank/list driver webdriver.Edge() driver.g…