Skip to content

31_创建方块世界地图 QGIS3

原文链接: https://www.qgistutorials.com/en/docs/3/block_world_styling.html

创建方块世界地图 (QGIS3)

贡献者: Steven Kim

在前一篇教程使用表达式进行基本过滤与样式设置 (QGIS3)中,我们了解了如何利用简单的表达式在 QGIS 中过滤和设置数据的样式。在本教程中,我们将在此基础上更进一步,使用包含高程值的六边形网格创建一个方块世界。

任务概述

我们将获取一个包含高程值的六边形网格,使用数学函数为 2.5D 渲染器设置高度变量,并应用条件语句来分配颜色渐变。

../../_images/output1.png

您将学到的其他技能

  • 发现并下载高程数据集。
  • 创建六边形网格并为每个网格单元提取栅格统计信息。
  • 向 QGIS 添加新的颜色渐变方案。

获取数据

OpenTopography 提供了许多开放许可的高程数据集。我们将从 OpenTopography 托管的一个全球 DEM 和海洋测深数据集中,为您感兴趣的区域提取并下载 DEM。

  1. 访问 OpenTopography 网站上的 全球 15 弧秒地形与测深数据:SRTM15+ V2.5.5 数据页面。这是一个 500 米分辨率的全球数据集,源自 SRTM DEM 和各种海洋测深数据集。

../../_images/data12.png

  1. 向下滚动到 1. 选择要处理的区域部分。点击 SELECT A REGION 按钮,绘制一个覆盖您感兴趣区域的矩形。

../../_images/data21.png

  1. 设置好区域后,向下滚动到 2. 数据输出格式部分,选择 GeoTiff。将所有其他选项保留为默认值,然后向下滚动到 作业描述部分。输入您的电子邮件地址以便在下载准备好时接收通知。点击 SUBMIT 按钮。

../../_images/data31.png

  1. 下载可能需要几分钟时间来处理。一旦就绪,您将收到下载所选子集的链接。将文件下载到您的计算机。下载的文件是一个 tar 压缩文件,需要解压缩才能在 QGIS 中打开。在 Windows 上,您可以使用外部程序如 7-Zip 来解压缩并提取 output_SRTM15Plus.tif 文件。

../../_images/data41.png

  1. 在 QGIS 的 浏览器 中定位 output_SRTM15Plus.tif 文件。将其拖放到 QGIS 画布中。一个新图层 output_SRTM15Plus 将被添加到 图层 面板。

../../_images/data51.png

  1. 从 处理 ‣ 工具箱 中打开 处理工具箱。搜索并找到 矢量创建 ‣ 创建网格 算法。双击打开它。

../../_images/data61.png

  1. 在 创建网格 对话框中,选择 六边形 作为 网格类型。我们将创建一个覆盖整个 DEM 的网格。因此,对于 网格范围,点击下拉箭头并选择 从图层计算 ‣ output_SRTM15Plus。

../../_images/data71.png

  1. 我们选择的区域相当大,所以可以创建一个 1 度的网格。为 水平间距 和 垂直间距 均选择 1。如果您在较小的区域工作,可以选择较小的网格间距。将其他选项保留为默认值,然后点击 运行 按钮以创建网格。

../../_images/data8.png

  1. 一个新图层 Grid 将被添加到 图层 面板。我们现在将提取每个网格多边形中的最小、最大和平均高程值。选择 Grid 图层,从 处理工具箱 中找到 栅格分析 ‣ 分区统计 算法。双击打开它。

../../_images/data9.png

  1. 选择 Grid 作为 输入图层,output_SRTM15Plus 作为 栅格图层。输入 dem_ 作为 输出列前缀。接下来,我们需要配置要从栅格中提取哪些统计信息。点击 要计算的统计信息 旁边的 … 按钮。

../../_images/data10.png

  1. 勾选 MeanMaximumMinimum 值的选项,然后点击 确定。我们将把结果保存到一个文件中。点击 分区统计 旁边的 … 按钮,选择 保存到文件…。

../../_images/data111.png

  1. 浏览到计算机上的一个文件夹,输入文件名为 hex_grid_with_elevation。确保文件类型选择为 GeoPackage 文件 (*.gpkg)。点击 保存。配置好 分区统计 对话框后,点击 运行。

../../_images/data121.png

  1. 根据网格的大小,处理可能需要几分钟时间。计算完成后,一个新图层 hex_grid_with_elevation 将被添加到 图层 面板。这是一个矢量图层,具有属性 dem_meandem_mindem_max,包含了从 DEM 中提取的高程统计信息。

../../_images/data13.png

为方便起见,您也可以直接从下方下载一份准备好的网格副本:

hex_grid_with_elevation.gpkg

数据来源 [OPENTOPOGRAPHY]

操作流程

  1. 在 QGIS 浏览器 中找到 hex_grid_with_elevation.gpkg 文件并展开。选择 hex_grid_with_elevation 图层并将其拖到画布上。

../../_images/120.png

  1. QGIS 中现在将加载一个新图层 hex_grid_with_elevation,您应该能看到一个六边形网格。

../../_images/218.png

  1. 在继续之前,我们必须先添加一个适合为 DEM 着色的颜色渐变方案。点击菜单栏中的 设置,选择 样式管理器。

../../_images/316.png

  1. 点击底部的加号 添加项,选择 目录: cpt-city…。

../../_images/45.png

  1. 向下滚动颜色渐变方案列表,直到找到 wiki-1.02。可能有好几个同名方案,只需点击其中一个,然后点击 确定。

../../_images/55.png

  1. 在 保存新颜色渐变 窗口中,输入 wiki-1.02 作为 名称。

../../_images/65.png

  1. 点击 保存 退出窗口,然后点击 关闭 退出样式管理器。现在,wiki-1.02 颜色渐变方案已可供您在未来的项目中使用。

../../_images/75.png

  1. 点击 打开图层样式面板,将样式从 单一符号 切换到 2.5 D。点击 高度 旁边的 ε 按钮。

../../_images/85.png

  1. 在 表达式构建器 中,输入以下表达式。该表达式使用 scale_exp() 函数将属性值 dem_mean 的范围从 0-10000 转换为 0-4,并使用指数 2。指数缩放效果在方块世界中看起来很不错。+8000 是为了使海洋底部等于零。

bash scale_exp(("dem_mean"+8000),0,10000,0,4,2)

../../_images/95.png

  1. 将 角度 改为 135

../../_images/108.png

  1. 我们将为网格应用自己的颜色。取消勾选 根据坡向着色墙壁 和 阴影。

../../_images/1111.png

  1. 您应该会看到区域地形开始成形。点击 打开图层样式面板,将样式从 2.5D 切换回 单一符号。

../../_images/128.png

  1. 在 符号 窗口中,注意有两个几何图形生成器,每个都带有 简单填充 图层类型。第一个 简单填充 是每个方块的上表面,而第二个 简单填充 是侧表面。

../../_images/137.png

  1. 点击第一个 简单填充 来更改上表面的颜色。点击 填充颜色 的数据定义覆盖按钮,在菜单中选择 编辑…。

../../_images/147.png

  1. 这将打开用于 填充颜色 的 表达式构建器 对话框。输入以下表达式。此表达式包含一个 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

../../_images/157.png

  1. 六边形网格现在按照我们的表达式确定的颜色进行渲染。点击 填充颜色 的数据定义覆盖按钮,在菜单中选择 复制。

../../_images/167.png

  1. 点击 描边颜色 的数据定义覆盖按钮,在菜单中选择 粘贴。

../../_images/177.png

  1. 您应该会看到颜色生效,我们的地图就完成了。欢迎您尝试本教程中的表达式,例如更改高度函数中的参数,或添加并尝试新的颜色渐变方案。

../../_images/185.png


如果您想提供反馈或分享学习本教程的体验,请在下方评论。(需要 GitHub 账户)