31_创建方块世界地图 QGIS3
原文链接: https://www.qgistutorials.com/en/docs/3/block_world_styling.html
创建方块世界地图 (QGIS3)¶
贡献者: Steven Kim
在前一篇教程使用表达式进行基本过滤与样式设置 (QGIS3)中,我们了解了如何利用简单的表达式在 QGIS 中过滤和设置数据的样式。在本教程中,我们将在此基础上更进一步,使用包含高程值的六边形网格创建一个方块世界。
任务概述¶
我们将获取一个包含高程值的六边形网格,使用数学函数为 2.5D 渲染器设置高度变量,并应用条件语句来分配颜色渐变。
您将学到的其他技能¶
- 发现并下载高程数据集。
- 创建六边形网格并为每个网格单元提取栅格统计信息。
- 向 QGIS 添加新的颜色渐变方案。
获取数据¶
OpenTopography 提供了许多开放许可的高程数据集。我们将从 OpenTopography 托管的一个全球 DEM 和海洋测深数据集中,为您感兴趣的区域提取并下载 DEM。
- 访问 OpenTopography 网站上的 全球 15 弧秒地形与测深数据:SRTM15+ V2.5.5 数据页面。这是一个 500 米分辨率的全球数据集,源自 SRTM DEM 和各种海洋测深数据集。
- 向下滚动到 1. 选择要处理的区域部分。点击 SELECT A REGION 按钮,绘制一个覆盖您感兴趣区域的矩形。
- 设置好区域后,向下滚动到 2. 数据输出格式部分,选择
GeoTiff。将所有其他选项保留为默认值,然后向下滚动到 作业描述部分。输入您的电子邮件地址以便在下载准备好时接收通知。点击 SUBMIT 按钮。
- 下载可能需要几分钟时间来处理。一旦就绪,您将收到下载所选子集的链接。将文件下载到您的计算机。下载的文件是一个 tar 压缩文件,需要解压缩才能在 QGIS 中打开。在 Windows 上,您可以使用外部程序如 7-Zip 来解压缩并提取
output_SRTM15Plus.tif文件。
- 在 QGIS 的 浏览器 中定位
output_SRTM15Plus.tif文件。将其拖放到 QGIS 画布中。一个新图层output_SRTM15Plus将被添加到 图层 面板。
- 从 处理 ‣ 工具箱 中打开 处理工具箱。搜索并找到 矢量创建 ‣ 创建网格 算法。双击打开它。
- 在 创建网格 对话框中,选择
六边形作为 网格类型。我们将创建一个覆盖整个 DEM 的网格。因此,对于 网格范围,点击下拉箭头并选择 从图层计算 ‣ output_SRTM15Plus。
- 我们选择的区域相当大,所以可以创建一个 1 度的网格。为 水平间距 和 垂直间距 均选择
1。如果您在较小的区域工作,可以选择较小的网格间距。将其他选项保留为默认值,然后点击 运行 按钮以创建网格。
- 一个新图层
Grid将被添加到 图层 面板。我们现在将提取每个网格多边形中的最小、最大和平均高程值。选择Grid图层,从 处理工具箱 中找到 栅格分析 ‣ 分区统计 算法。双击打开它。
- 选择
Grid作为 输入图层,output_SRTM15Plus作为 栅格图层。输入dem_作为 输出列前缀。接下来,我们需要配置要从栅格中提取哪些统计信息。点击 要计算的统计信息 旁边的 … 按钮。
- 勾选
Mean、Maximum和Minimum值的选项,然后点击 确定。我们将把结果保存到一个文件中。点击 分区统计 旁边的 … 按钮,选择 保存到文件…。
- 浏览到计算机上的一个文件夹,输入文件名为
hex_grid_with_elevation。确保文件类型选择为 GeoPackage 文件 (*.gpkg)。点击 保存。配置好 分区统计 对话框后,点击 运行。
- 根据网格的大小,处理可能需要几分钟时间。计算完成后,一个新图层
hex_grid_with_elevation将被添加到 图层 面板。这是一个矢量图层,具有属性dem_mean、dem_min和dem_max,包含了从 DEM 中提取的高程统计信息。
为方便起见,您也可以直接从下方下载一份准备好的网格副本:
数据来源 [OPENTOPOGRAPHY]
操作流程¶
- 在 QGIS 浏览器 中找到
hex_grid_with_elevation.gpkg文件并展开。选择hex_grid_with_elevation图层并将其拖到画布上。
- QGIS 中现在将加载一个新图层
hex_grid_with_elevation,您应该能看到一个六边形网格。
- 在继续之前,我们必须先添加一个适合为 DEM 着色的颜色渐变方案。点击菜单栏中的 设置,选择 样式管理器。
- 点击底部的加号 添加项,选择 目录: cpt-city…。
- 向下滚动颜色渐变方案列表,直到找到 wiki-1.02。可能有好几个同名方案,只需点击其中一个,然后点击 确定。
- 在 保存新颜色渐变 窗口中,输入
wiki-1.02作为 名称。
- 点击 保存 退出窗口,然后点击 关闭 退出样式管理器。现在,wiki-1.02 颜色渐变方案已可供您在未来的项目中使用。
- 点击 打开图层样式面板,将样式从 单一符号 切换到 2.5 D。点击 高度 旁边的 ε 按钮。
- 在 表达式构建器 中,输入以下表达式。该表达式使用
scale_exp()函数将属性值dem_mean的范围从 0-10000 转换为 0-4,并使用指数 2。指数缩放效果在方块世界中看起来很不错。+8000是为了使海洋底部等于零。
bash scale_exp(("dem_mean"+8000),0,10000,0,4,2)
- 将 角度 改为
135。
- 我们将为网格应用自己的颜色。取消勾选 根据坡向着色墙壁 和 阴影。
- 您应该会看到区域地形开始成形。点击 打开图层样式面板,将样式从 2.5D 切换回 单一符号。
- 在 符号 窗口中,注意有两个几何图形生成器,每个都带有 简单填充 图层类型。第一个 简单填充 是每个方块的上表面,而第二个 简单填充 是侧表面。
- 点击第一个 简单填充 来更改上表面的颜色。点击 填充颜色 的数据定义覆盖按钮,在菜单中选择 编辑…。
- 这将打开用于 填充颜色 的 表达式构建器 对话框。输入以下表达式。此表达式包含一个
CASE条件语句:当属性dem_mean的值大于或等于零时,使用 wiki-1.02 颜色;当dem_mean小于零时,使用绿-蓝颜色。
bash CASE WHEN "dem_mean" >= 0 THEN ramp_color('wiki-1.02',scale_linear("dem_min",0,1500,0.4,1)) ELSE ramp_color('GnBu',scale_linear("dem_mean",-6000,0,1,0)) END
- 六边形网格现在按照我们的表达式确定的颜色进行渲染。点击 填充颜色 的数据定义覆盖按钮,在菜单中选择 复制。
- 点击 描边颜色 的数据定义覆盖按钮,在菜单中选择 粘贴。
- 您应该会看到颜色生效,我们的地图就完成了。欢迎您尝试本教程中的表达式,例如更改高度函数中的参数,或添加并尝试新的颜色渐变方案。
如果您想提供反馈或分享学习本教程的体验,请在下方评论。(需要 GitHub 账户)































