分享

用GIS数据生成3D城市模型「3dfier」

 邸彦强 2022-05-23 发布于河北

在这个教程中,我们将学习如何使用挤压方法(extrusion)和开源软件3dfier利用开放数据生成 3D 城市模型。

文章图片1

1、挤压方法简介

生成 3D 城市模型的一种流行方法是挤压:将 2D 数据集(例如地籍数据库)中的特征提升到单个高度,从而创建体积 3D 城市模型。高度通常来自激光扫描(例如区域内所有点的平均高度)、地籍数据库或志愿地理信息(例如使用楼层数)。第一种情况如图所示:

文章图片2

这种方法简单明了。生成的 3D 城市模型虽然简单(它们只有平顶;所谓的 LOD1 模型),但与 2D 数据集相比具有很大优势。例如,它们可用于阴影分析和视线预测。

然而,有一些挑战需要注意,例如 2D 数据中的错误传播到生成的 3D 模型,虽然这种方法简单但没有很多实现,并且由于点云通常很大,每个特征的高度计算可能很慢。

在代尔夫特理工大学的3D 地理信息小组,我们开发了3dfier用于创建 3D 模型。在本教程中,我们将简要演示如何使用开放数据生成 3D 模型。

2、软件的安装

3dfier软件是命令行的,也就是说,它没有图形界面。但是,使用起来仍然非常简单。

第一步是按照安装说明进行安装。要测试是否安装正确,只需运行./3dfier,你应该会得到如下内容:

$ ./3dfier 3dfier Copyright (C) 2015-2019 3D geoinformation research group, TU DelftThis program comes with ABSOLUTELY NO WARRANTY.This is free software, and you are welcome to redistribute itunder certain conditions; for details run 3dfier with the '--license' option.ERROR: one YAML config file must be specified.Allowed options: --help View all options --version View version --license View license --OBJ arg Output --OBJ-NoID arg Output --CityGML arg Output --CityGML-Multifile arg Output --CityGML-IMGeo arg Output --CityGML-IMGeo-Multifile arg Output --CityJSON arg Output --CSV-BUILDINGS arg Output --CSV-BUILDINGS-MULTIPLE arg Output --CSV-BUILDINGS-ALL-Z arg Output --Shapefile arg Output --Shapefile-Multifile arg Output --PostGIS arg Output --PostGIS-PDOK arg Output --PostGIS-PDOK-CityGML arg Output --GDAL arg Output

3、3dfier 用法简介

3dfier 需要一个或多个 2D 数据集和一个或多个高程数据集作为输入。2D 数据集可以是任何 OGR 格式,例如 SHP 或 GML。高程数据集将位于 LAS/LAZ 中。

除了定义输入数据集外,3dfier 还可以定义某些参数,例如点云抽稀。

.yml所有这些都在带有扩展名的单个文本文件中定义。例如,如果你在单独的 2D 文件中构建封装,输入将如下所示:

input_polygons:    datasets:       - bgt/bgt_pand.sqlite    uniqueid: gml_id    lifting: Building

不用担心,3dfier 附带一个准备好的示例配置文件,你可以对其进行编辑以适应自己的情况。

4、生成自己的数据集

下载软件后,你可能已经注意到有一个名为example_data 的文件, 它包含创建示例 3D 城市模型所需的一切,我们将在本简短教程中使用该模型。

配置文件testarea_config.yml已准备好所有必需的信息。

首先熟悉下输入数据集。在这个二维数据示例中,我们将使用BGT,即荷兰大比例尺地形图。BGT 是由荷兰国家测绘机构Kadaster提供的开放数据。该文件夹bgt包含多个文件中的 2D 数据集。我们将研究的区域是代尔夫特的中心(你可以使用免费的QGIS查看文件):

文章图片3

因此 2D 数据集不仅包含建筑物,还包含水、道路和植被等其他特征。

对于高程,我们将使用荷兰国家高度模型 ( AHN )。它也可以作为开放数据使用。该区域有两个文件,都存储在文件夹中ahn3。这是点云的样子(你可以使用免费软件CloudCompare):

文章图片4

有关输入点云的信息也记录在配置文件中:

input_elevation: - datasets: - ahn3/ahn3_cropped_1.laz - ahn3/ahn3_cropped_2.laz omit_LAS_classes: - 1 # unclassified thinning: 0

请注意,在配置文件中,你还可以指定省略点云中的某些类(例如植被)并细化点以加快处理速度。这两个激光雷达文件很小,因此我们将考虑所有激光雷达点。

现在已经检查了输入数据集,让我们看看 3dfier 的其他一些选项。一个重要的选项是指定如何确定每个建筑物顶部的标高。在我们的例子中:

lifting_options:  Building:    roof:        height: percentile-90    ground:        height: percentile-10

“屋顶”的标高位于建筑物占地面积内所有点标高的 90%。这应该大致对应于建筑物顶部的标高(给出 90% 的值以过滤掉异常值和特征,例如烟囱)。底部(即接地板)的标高位于第 10 个百分位。可以使用这些值并确定最适合你的值。有些人更喜欢使用height_roof: percentile-50在所有点的中位数处获得顶部的高度。

另一个重要的选项是生成的 3D 城市模型的格式。选项在上面的软件安装中显示。该选项作为命令行参数传递。

3dfier 提供CityJSON、OBJ和更多格式。OBJ 受到 3D 计算机图形软件的广泛支持,因此可以创建一个漂亮的 3D 模型渲染:

文章图片5

另一方面,CityJSON 是一种强大的 3D GIS 格式,可以对对象进行空间分析和结构化。

现在我们准备好在 CityJSON 和 OBJ 中生成 3D 模型。生成 3D 模型只需要一个简单的命令:

3dfier testarea_config.yml --OBJ output/testarea.obj --CityJSON output/testarea.json

3dfier 将报告 3D 生成的过程,但总体而言,对于此示例,它不应超过半分钟。如果输入数据一切顺利,该文件应该在指定的目录中可用(在我们的例子中/output)。

如果你生成了一个 OBJ,可以使用免费软件MeshLab来查看它。如果你选择了 CityJSON,可以使用我们的CityJSON web-viewer将其可视化。

一个 OBJ 由三角形组成,因此结果将如下所示:

文章图片6

3dfier还自带了一个材质文件,所以如果你在MeshLab中切换相应的选项就可以可视化不同的语义类:

文章图片7
文章图片8

CityJSON 看起来很相似:

文章图片9

恭喜,你已经创建了 3D 城市模型!

5、用你自己的数据试试

现在你已经熟悉了 3dfier,您以尝试使用自己的数据生成 3D 城市模型。如果生成了一个不错的数据集,请告诉我们,以便我们可以在我们的网站上展示它。


原文链接:
http://www./blog/gis-to-3d-city-with-3dfier/

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多