34_创建等轴测建筑图 QGIS3
原文链接: https://www.qgistutorials.com/en/docs/3/isometric_buildings.html
创建等轴测建筑图 (QGIS3)¶
贡献者: Steven Kim
OpenStreetMap (OSM) 是一个众包的全球数据集,包含道路、边界、建筑物等。它拥有世界各地不断增长的建筑物轮廓集合,其中许多还包含高度信息。虽然建筑物高度数据的准确性难以验证用于分析,但我们可以使用 QGIS 表达式从这些数据中创建有趣的艺术性等轴测渲染图。
任务概述¶
我们将从 OSM 下载多伦多市中心的建筑物轮廓数据,并创建建筑高度的等轴测地图。

获取数据¶
我们将使用 QuickOSM 插件从 OpenStreetMap (OSM) 下载数据。有关 QuickOSM 插件的介绍,请参见 搜索和下载 OpenStreetMap 数据 (QGIS3)。安装好插件后,您可以按照以下说明获取您所在区域的数据。
注意
本教程专门设计用于处理从 QuickOSM 插件提取的 OSM 数据。高度表达式不适用于 OSM 行星文件或带有 other_tags 的数据提取物。在这些情况下,您首先需要提取建筑物层数和高度,然后再使用它们。
- 打开 QGIS。我们首先加载一个底图。在 Browser(浏览器) 面板中,向下滚动并找到 XYZ Tiles ‣ OpenStreetMap 瓦片图层。将其拖放到主画布上。缩放到您感兴趣的区域。确保地图范围完全覆盖该区域。

- 从 Vector(矢量) ‣ QuickOSM ‣ QuickOSM… 启动 QuickOSM 插件。

- 在 Quick query(快速查询) 选项卡中,输入
building作为 Key(键)。将 In(范围) 更改为 Canvas Extent(画布范围)。这将下载当前画布范围内的所有建筑物。展开 Advanced(高级) 部分,然后取消选中 Points(点)、Lines(线) 和 Multilinestrings(多线)。这应该会保留 Nodes(节点)、Ways(路径)、Relations(关系) 和 Multipolygons(多多边形) 为选中状态。选择 Run query(运行查询)。地图加载完成后关闭窗口。

- 画布范围内所有可用的建筑物轮廓将加载到一个名为
building的新图层中。您可以继续使用这些数据,或者选择建筑物的一个子集。在本教程中,我们将选择您感兴趣区域内的所有建筑物。点击 Selection Toolbar(选择工具栏) 上的 Select Features by Area or Single Click(按区域或单击选择要素) 按钮。您可以按住鼠标左键并绘制一个矩形来选择所需的建筑物。您也可以按住Shift键并单击多边形来选择它们。

- 选择所有所需的建筑物后,右键单击
building图层,然后选择 Export(导出) ‣ Save Selected Features As…(将所选要素另存为…)。

- 在 Save Vector Layer As…(将矢量图层另存为…) 对话框中,点击 File name(文件名) 旁边的 … 按钮,浏览到您计算机上的一个文件夹。输入 File name(文件名) 为
osm_buildings.gpkg和 Layer name(图层名) 为buildings。下载的建筑物采用 CRS EPSG:4326 WGS84。这是一个以度为单位的地理坐标系。我们可以选择一个投影坐标系,它允许我们使用米等线性测量单位。点击 Select CRS(选择CRS) 的下拉菜单,选择Project CRS: EPSG:3857 - WGS84 / Pseudo-Mercator。点击 OK(确定)。

- 所选的建筑物将被重新投影并保存到一个新的 GeoPackage 文件中。

为方便起见,您可以直接从下方下载多伦多市中心建筑物的副本:
数据来源 [OPENSTREETMAP]
操作步骤¶
-
在 QGIS Browser(浏览器) 中找到
osm_buildings.gpkg文件并展开它。选择buildings图层并将其拖到画布上。
2. 点击 Open Layer Styling Panel(打开图层样式面板),从 Single Symbol(单一符号) 切换到 2.5 D。
3. 点击 Height(高度) 旁边的 ε 按钮。
4. 在 Expression Builder(表达式构建器) 中,输入以下表达式。此表达式对 building:levels和height的第一个非空字段应用一个乘数。如果两者都为空,则使用默认高度 20 米。请记住,这些是为了在大比例尺下可视化而夸张的高度。bash coalesce("building:levels"*10, "height"*2, 20)
-
将 Angle(角度) 更改为
135度。
6. 取消选中 Shade walls based on aspect(根据坡向对墙体着色) 和 Shadow(阴影)。我们将应用自己的颜色。点击选择渲染器的下拉菜单。
7. 从 2.5 D 切换回 Single Symbol(单一符号)。
8. 在 Symbol(符号) 窗口中,注意有两个 Geometry Generator(几何图形生成器),每个都包含一个 Simple Fill(简单填充) 图层类型。第一个 Simple Fill(简单填充) 是每个块的顶面,而第二个 Simple Fill(简单填充) 是侧面。点击第一个 Simple Fill(简单填充) 来更改顶面的颜色。点击 Fill color(填充颜色) 的 Data define override(数据定义覆盖) 按钮,在菜单中选择 Edit…(编辑…)。
9. 这将打开 Fill color(填充颜色) 的 Expression Builder(表达式构建器) 对话框。输入以下表达式。此表达式根据数据到地图中心的距离,将 Spectral 色带应用于数据。bash ramp_color('Spectral', scale_linear( distance(@geometry,@map_extent_center), 0,@map_extent_width/6, 0,1 ) )
-
点击 Fill color(填充颜色) 的 Data define override(数据定义覆盖) 按钮,在菜单中选择 Copy…(复制…)。
11. 点击 Stroke color(描边颜色) 的 Data define override(数据定义覆盖) 按钮,在菜单中选择 Paste…(粘贴…) 以应用相同的表达式。
12. 现在点击第二个 Simple Fill(简单填充) 来更改侧面颜色。您可能需要向下滚动才能做到这一点。点击 Symbol Layer Type(符号图层类型) 的下拉菜单。
13. 将 Symbol Layer Type(符号图层类型) 从 Simple Fill(简单填充) 更改为 Gradient Fill(渐变填充)。Two color(两种颜色) 旁边的两个颜色选择器代表渐变的顶部和底部颜色。点击顶部颜色的 Data define override(数据定义覆盖) 按钮。
14. 选择 Edit(编辑) 并输入以下表达式。这是我们用于屋顶颜色的同一个表达式,但使用 set_color_part()函数调整了颜色的透明度。bash set_color_part( ramp_color('Spectral', scale_linear( distance(@geometry,@map_extent_center), 0,@map_extent_width/6, 0,1 ) ), 'alpha',100)
15. 点击底部颜色选择器的小黑三角形,然后勾选 Transparent(透明) 框。
16. 在退出 Layer Styling Panel(图层样式面板) 之前,让我们转换图层以完成等轴测视图。展开 Layer Rendering(图层渲染) 部分,并勾选 Draw Effects(绘制效果)。点击右侧的 Customize Effects(自定义效果) 星形图标。
17. 点击 Effect Type(效果类型) 旁边的下拉菜单。
18. 将 Effect Type(效果类型) 从 Source(源) 更改为 Transform(变换)。对于 Shear X,Y(切变 X,Y),分别输入 -0.2 和 -0.2。
19. 输入 45作为 Rotation(旋转)。退出并关闭 Layer Styling Panel(图层样式面板)。
20. 您现在应该可以看到等轴测视图中建筑物多边形的彩色表示。请随意尝试高度、角度、填充颜色等的表达式。
如果您想提供反馈或分享您对本教程的经验,请在下方留言。(需要 GitHub 账户)