在这个教程中,我们将学习如何使用挤压方法(extrusion)和开源软件3dfier利用开放数据生成3D城市模型。 1、挤压方法简介 生成3D城市模型的一种流行方法是挤压:将2D数据集(例如地籍数据库)中的特征提升到单个高度,从而创建体积3D城市模型。高度通常来自激光扫描(例如区域内所有点的平均高度)、地籍数据库或志愿地理信息(例如使用楼层数)。第一种情况如图所示: 这种方法简单明了。生成的3D城市模型虽然简单(它们只有平顶;所谓的LOD1模型),但与2D数据集相比具有很大优势。例如,它们可用于阴影分析和视线预测。 然而,有一些挑战需要注意,例如2D数据中的错误传播到生成的3D模型,虽然这种方法简单但没有很多实现,并且由于点云通常很大,每个特征的高度计算可能很慢。 在代尔夫特理工大学的3D地理信息小组,我们开发了3dfier用于创建3D模型。在本教程中,我们将简要演示如何使用开放数据生成3D模型。2、软件的安装 3dfier软件是命令行的,也就是说,它没有图形界面。但是,使用起来仍然非常简单。 第一步是按照安装说明进行安装。要测试是否安装正确,只需运行。3dfier,你应该会得到如下内容:。3dfier3dfierCopyright(C)201520193Dgeoinformationresearchgroup,TUDelftThisprogramcomeswithABSOLUTELYNOWARRANTY。Thisisfreesoftware,andyouarewelcometoredistributeitundercertainconditions;fordetailsrun3dfierwiththelicenseoption。ERROR:oneYAMLconfigfilemustbespecified。Allowedoptions:helpViewalloptionsversionViewversionlicenseViewlicenseOBJargOutputOBJNoIDargOutputCityGMLargOutputCityGMLMultifileargOutputCityGMLIMGeoargOutputCityGMLIMGeoMultifileargOutputCityJSONargOutputCSVBUILDINGSargOutputCSVBUILDINGSMULTIPLEargOutputCSVBUILDINGSALLZargOutputShapefileargOutputShapefileMultifileargOutputPostGISargOutputPostGISPDOKargOutputPostGISPDOKCityGMLargOutputGDALargOutput3、3dfier用法简介 3dfier需要一个或多个2D数据集和一个或多个高程数据集作为输入。2D数据集可以是任何OGR格式,例如SHP或GML。高程数据集将位于LASLAZ中。 除了定义输入数据集外,3dfier还可以定义某些参数,例如点云抽稀。 。yml所有这些都在带有扩展名的单个文本文件中定义。例如,如果你在单独的2D文件中构建封装,输入将如下所示:inputpolygons:datasets:bgtbgtpand。sqliteuniqueid:gmlidlifting:Building 不用担心,3dfier附带一个准备好的示例配置文件,你可以对其进行编辑以适应自己的情况。4、生成自己的数据集 下载软件后,你可能已经注意到有一个名为exampledata的文件,它包含创建示例3D城市模型所需的一切,我们将在本简短教程中使用该模型。 配置文件testareaconfig。yml已准备好所有必需的信息。 首先熟悉下输入数据集。在这个二维数据示例中,我们将使用BGT,即荷兰大比例尺地形图。BGT是由荷兰国家测绘机构Kadaster提供的开放数据。该文件夹bgt包含多个文件中的2D数据集。我们将研究的区域是代尔夫特的中心(你可以使用免费的QGIS查看文件): 因此2D数据集不仅包含建筑物,还包含水、道路和植被等其他特征。 对于高程,我们将使用荷兰国家高度模型(AHN)。它也可以作为开放数据使用。该区域有两个文件,都存储在文件夹中ahn3。这是点云的样子(你可以使用免费软件CloudCompare): 有关输入点云的信息也记录在配置文件中:inputelevation:datasets:ahn3ahn3cropped1。lazahn3ahn3cropped2。lazomitLASclasses:1unclassifiedthinning:0 请注意,在配置文件中,你还可以指定省略点云中的某些类(例如植被)并细化点以加快处理速度。这两个激光雷达文件很小,因此我们将考虑所有激光雷达点。 现在已经检查了输入数据集,让我们看看3dfier的其他一些选项。一个重要的选项是指定如何确定每个建筑物顶部的标高。在我们的例子中:liftingoptions:Building:roof:height:percentile90ground:height:percentile10 屋顶的标高位于建筑物占地面积内所有点标高的90。这应该大致对应于建筑物顶部的标高(给出90的值以过滤掉异常值和特征,例如烟囱)。底部(即接地板)的标高位于第10个百分位。可以使用这些值并确定最适合你的值。有些人更喜欢使用heightroof:percentile50在所有点的中位数处获得顶部的高度。 另一个重要的选项是生成的3D城市模型的格式。选项在上面的软件安装中显示。该选项作为命令行参数传递。 3dfier提供CityJSON、OBJ和更多格式。OBJ受到3D计算机图形软件的广泛支持,因此可以创建一个漂亮的3D模型渲染: 另一方面,CityJSON是一种强大的3DGIS格式,可以对对象进行空间分析和结构化。 现在我们准备好在CityJSON和OBJ中生成3D模型。生成3D模型只需要一个简单的命令:3dfiertestareaconfig。ymlOBJoutputtestarea。objCityJSONoutputtestarea。json 3dfier将报告3D生成的过程,但总体而言,对于此示例,它不应超过半分钟。如果输入数据一切顺利,该文件应该在指定的目录中可用(在我们的例子中output)。 如果你生成了一个OBJ,可以使用免费软件MeshLab来查看它。如果你选择了CityJSON,可以使用我们的CityJSONwebviewer将其可视化。 一个OBJ由三角形组成,因此结果将如下所示: 3dfier还自带了一个材质文件,所以如果你在MeshLab中切换相应的选项就可以可视化不同的语义类: CityJSON看起来很相似: 恭喜,你已经创建了3D城市模型!5、用你自己的数据试试 现在你已经熟悉了3dfier,您以尝试使用自己的数据生成3D城市模型。如果生成了一个不错的数据集,请告诉我们,以便我们可以在我们的网站上展示它。 原文链接:http:www。bimant。combloggisto3dcitywith3dfier