今天我将展示如何读取 CityGML 文件并以 3D 方式查看其信息,以及如何通过挤出将shapefile转化为3D模型。
我还没有找到 3D 渲染器中可用设置的非常详细的描述,因此我花了一些时间测试它们。 我试图弄清楚它们的作用以及何时使用它们。 我将在本文末尾解释我的发现。
但就像我之前提到的,我无法检查我的结论是否正确。 如果我有什么问题,请告诉我!
推荐:用 NSDT设计器 快速搭建可编程3D场景。
目前,不难找到免费使用的 3D 城市模型。 大多数城市都有开放、免费的 3D 数据可供下载。 你可以在政府机构运营的地理信息门户上找到它们。
如果你不想查找数据,请访问 CityGML 官方网站。 可以在那里找到此类门户网站的完整列表以及一些示例数据集。
更好的是,现在你可以使用新的 Google 数据集搜索。 只需在搜索框中输入 CityGML 并找到您要的数据。
为了本指南的目的,我使用了CityGML 网站上找到的代尔夫特的示例数据集,你可以从这里下载。
下载并解压 CityGML 文件后,创建一个新的 QGIS 项目。
首先,将 Delft_3dfier.gml 文件拖到 QGIS 窗口中打开。 如果程序询问你要导入哪些图层,请标记“构建”并按“确定”。 最有可能的是,图层会丢失 CRS 信息,因此请在图层属性中手动设置。
我将其设置为 EPSG: 7415,这是我的数据的 CRS。
不要忘记设置项目的坐标系。 请务必选择投影 CRS,否则,3D 地图视图将无法打开。 我用的和以前一样(EPSG:7415)。
接下来的步骤很简单。 打开图层样式面板,启用 3D 渲染器并打开 3D 地图视图以查看效果。
你是否知道,即使是普通的shapefile(例如直线和多边形)也可以以 3D 形式可视化?
在第二个示例中,我将根据 OpenStreetMap 信息创建一个建筑物占地面积并对其进行拉伸。 为了表示地形,我将其放置在 DEM 图层上。
添加一些带有建筑物的底图。 例如开放街道地图。
在左侧的浏览器面板中,右键单击 XYZ Tiles。 选择“新建连接”,输入图层的名称。
在 URL 字段中粘贴此链接:
http://tile.openstreetmap.org/{z}/{x}/{y}.png
并单击“确定”进行确认。 新图层出现在 XYZ 瓷砖下方。 将其拖至图层面板。
创建一个新的多边形图层并勾勒出所选建筑物的轮廓。
准备好后,打开“图层样式”面板并导航到“3D 视图”选项卡。 启用 3D 渲染器。
将 DEM 文件添加到项目中并检查建筑物下的一些高程值。 输入这些数字的平均值作为高度。
它将确保建筑物的底面保持在地形的顶部。 在拉伸值下,输入建筑物的高度。 将高度限制设置为绝对。
打开 3D 地图视图并检查结果。
本文包含了QGIS的 3D 渲染器可用设置的简短描述。 我通过在线研究找到了一些解释,通过尝试和测试方法找到了其他解释。
高度限位(Height Clamp)负责确定物体在表面上的位置。 共有三个选项:绝对、相对和地形。 根据你选择的设置,高度值的解释方式有所不同。 如果高度值是绝对值并且从 0 开始测量(如 CityGML 示例),则“绝对”设置是最佳选择。 另外两个值“相对”和“地形”将给定的高度值添加到地形高程中。
将高度绑定(Height Binding)设置为顶点,要素的每个顶点都将被固定到曲面上。
另一方面,如果你选择质心,则仅附加要素的质心。
剔除(culling)一词用于 3D 渲染。 这意味着排除不会添加到最终图像的几何图形。 使用剔除可以提高渲染速度。
如果将剔除模式设置为“返回”,则面向建筑物内部的多边形将不会被渲染。 这意味着如果在 3D 模型内部移动视角,你将能够看到外部。 此设置有助于性能优化。
设置正面剔除将导致多边形正面消失。
有时 3D 多边形无法正确构建。 当这种情况发生时,你可以在启用反向剔除时注意到它 - 一些墙丢失了。 如果你想改进此类数据的渲染,请启用“添加背面”选项。 但要小心,此操作需要更多的图形内存。
在漫反射下,你可以设置对象的颜色。
设置环境颜色意味着选择对象处于阴影中时的颜色。
镜面反射设置闪亮物体的反射颜色
更改光泽值可控制对象的反射率。
原文链接:CityGML三维查看 — BimAnt