7.3. 课: 地形分析

某些类型的栅格允许您更深入地了解它们所表示的地形。数字高程模型 (DEM) 在这方面特别有用。在本课中,您将使用地形分析工具,了解更多关于之前提出的住宅开发研究区域的信息。

本课目标: 使用地形分析工具获取有关地形的更多信息。

7.3.1. basic 跟我做: 计算山体阴影

我们将使用与上一课相同的DEM图层。如果您从头开始本节练习,请使用 浏览器 面板加载 raster/SRTM/srtm_41_19.tif 文件。

DEM图层显示地形的高程,但有时看起来有点抽象。它包含了您需要的有关地形的所有3D信息,但看起来并不像3D对象。为了更好地了解地形,可以计算 山体阴影 ,这种栅格使用光和阴影来映射地形,以创建3D外观图像。

我们将使用的算法位于 栅格 ► 栅格地形分析 菜单中。

  1. 单击 山体阴影 菜单

  2. 该算法允许您指定光源的位置: 方位角 的值从0 (北) 到90 (东)、180 (南) 和270 (西),而 垂直角 设置光源的高度 (0到90度)。

  3. 我们将使用以下值:

    • Z因子1.0

    • 方位角 (水平角度)300.0°

    • 垂直角40.0°

    ../../../_images/hillshade_explanation.png
  4. 将文件保存在新文件夹 exercise_data/raster_analysis/ 中,命名为 hillshade

  5. 最后单击 运行

现在,您拥有一个名称为 hillshade 的新图层,如下所示:

../../../_images/hillshade_raster.png

这看起来还不错,而且是3D效果,但我们可以完善一下吗?就其本身而言,山体阴影看起来就像石膏模型。就不能以某种方式把它和其他颜色更丰富的栅格一起使用吗?当然可以,我们通过使用山体阴影作为叠加图层来实现。

7.3.2. basic 跟我做: 使用山体阴影作为叠加图层

山体阴影可以提供在一天中的某个特定时间关于阳光的非常有用的信息。但它也可以用于美学目的,使地图看起来更好。关键是设置山体阴影的透明度。

  1. 将原来 srtm_41_19 图层的符号更改为使用上一练习中的 伪彩色 方案

  2. 隐藏除 srtm_41_19hillshade 图层之外的所有图层

  3. 单击并拖动 srtm_41_19 ,使其位于 图层 面板中的 hillshade 图层下方

  4. 单击图层属性中的 透明度 选项卡,设置 hillshade 图层的透明度

  5. 全局不透明度 设置为 50%

    您将得到如下结果:

    ../../../_images/hillshade_pseudocolor.png
  6. 图层 面板中关闭并重新打开 hillshade 图层,查看其不同之处。

以这种方式使用山体阴影,可以改善地形的美化效果。如果效果对您来说不够明显,可以更改 hillshade 图层的透明度。当然,山体阴影越亮,其后面的颜色就越暗。这需要找到适合您的平衡点。

完成后记得保存工程。

7.3.3. 跟我做: 寻找最佳区域

回想一下房地产代理问题,我们上次在 矢量分析 课中讨论了这个问题。让我们想象一下,买家现在希望购买一栋房屋,并在所属地产上建造一座较小的平房。在南半球,我们知道,理想的开发地块需要有以下区域:

  • 朝向为北

  • 坡度小于5度

  • 但如果坡度小于2度,则无需考虑坡向问题。

让我们为他们找到最好的地方。

7.3.4. moderate 跟我做: 计算坡度

坡度 表示地形的陡峭程度。例如,如果想在那里的土地上建造房屋,那么您需要相对平坦的土地。

要计算坡度,需要使用 处理工具箱 ► 栅格地形分析 中的 坡度 算法。

  1. 打开算法

  2. 选择 srtm_41_19 作为 高程图层

  3. Z 因子 保留为 1.0

  4. 将输出另存为与 hillshade 位于同一文件夹中并命名为 slope 的文件

  5. 单击 运行

现在,您将看到地形的坡度,每个像素都有相应的坡度值。黑色像素显示为平坦地形,白色像素显示陡峭地形:

../../../_images/slope_raster.png

7.3.5. moderate 试一试 计算坡向

坡向 是地形坡度所面对的罗盘方向。坡向为0表示坡度朝北、朝东90度、朝南180度、朝西270度。

因为这项研究是在南半球进行的,所以理想情况下,房屋应该建在朝北的坡度上,这样就可以一直沐浴阳光。

使用 处理工具箱 ► 栅格地形分析 中的 坡向 算法,以获得 aspect 图层随 slope 一起保存。

7.3.6. moderate 跟我做: 寻找朝北坡向

现在,您可以通过栅格显示坡度和坡向,但您无法立即知道理想条件在哪里可以满足要求。如何进行这种分析?

答案在于 栅格计算器

QGIS提供了不同的栅格计算器供选用:

  • 栅格 ► 栅格计算器

  • 在处理工具箱中:

    • 栅格分析 ► 栅格计算器

    • GDAL ► 栅格杂项 ► 栅格计算器

    • SAGA ► Raster calculus ► Raster calculator

以上每种工具都会产生相同的结果,但语法可能略有不同,而且可用的运算符可能会有所不同。

我们将使用 处理工具箱 中的 栅格分析 ► 栅格计算器

  1. 双击打开此工具。

    • 对话框的左上角列出了所有加载的栅格图层,正如 name@N ,其中 name 是图层名, N 是波段。

    • 在右上角,会看到许多不同的运算符。停下来想一想,栅格就是图像。您应该将其看作填充有数字的2D矩阵。

  2. 北为 0 (零) 度,因此要使地形朝北,其坡向必须大于270度或小于90度。因此,公式为:

    aspect@1 <= 90 OR aspect@1 >= 270
    
  3. 现在,您必须设置栅格详细信息,如像元大小、范围和CRS。这可以手动完成,也可以通过选择 参照图层 自动设置。单击 参照图层 参数旁边的 ... 按钮来选择最后一个选项。

  4. 在对话框中,选择 aspect 图层,因为我们希望获得具有相同分辨率的图层。

  5. 将图层另存为 aspect_north

    对话框应如下所示:

    ../../../_images/raster_calculator.png
  6. 最后单击 运行

您的结果将是这样的:

../../../_images/aspect_result.png

输出值为 01 ,这是什么意思?对于栅格中的每个像素,我们编写的公式将返回它是否符合条件。因此,最终结果将是 False (0) 和 True (1) 。

7.3.7. moderate 试一试 更多条件

现在已经完成了坡向,请从DEM创建两个新图层。

  • 首先应确定坡度小于或等于 2 度的区域

  • 第二个类似,但坡度应小于或等于 5 度。

  • 将它们保存在 exercise_data/raster_analysis 命名为 slope_lte2.tifslope_lte5.tif

7.3.8. moderate 跟我做: 组合栅格分析结果

现在,您已经从DEM生成了三个栅格图层:

  • aspect_north: 朝北的地形

  • slope_lte2: 坡度等于或低于2度

  • slope_lte5: 坡度等于或低于5度

满足条件时,像素值为 1 ,其他为 0 。因此,如果将这些栅格相乘,所有值为 1 的像素将得到 1 的值 (其余像素将得到 0 )。

需要满足的条件包括:

  • 坡度等于或低于5度时,地形必须朝北

  • 坡度等于或低于2度时,地形的朝向无关紧要。

因此,您需要找到坡度在5度或以下 AND 地形朝北, OR 坡度在2度或以下的区域。这样的地形适合开发。

要计算满足这些条件的区域:

  1. 再次打开 栅格计算器

  2. 表达式 中使用如下表达式:

    ( aspect_north@1 = 1 AND slope_lte5@1 = 1 ) OR slope_lte2@1 = 1
    
  3. Reference layer(s) - 参照图层 参数设置为 aspect_north (如果您选择另一个也没关系 - 它们都是根据 srtm_41_19 计算的)

  4. 将输出保存在 exercise_data/raster_analysis/ 中的 all_conditions.tif

  5. 单击 运行

其结果为:

../../../_images/development_analysis_results.png

提示

使用以下命令可以简化前面的步骤:

((aspect@1 <= 90 OR  aspect@1 >= 270) AND slope@1 <= 5) OR slope@1 <= 2

7.3.9. moderate 跟我做: 简化栅格

正如您从上图看到的,组合分析给我们留下了许多非常小的满足条件的区域 (白色)。但这些对我们的分析并没有真正的用处,因为它们太小而无法构建任何东西。让我们把这些极小的不能使用的地方都处理掉。

  1. 打开 滤除碎斑 工具 (位于 处理工具箱 中的 GDAL ► 栅格分析)

  2. 输入图层 设置为 all_conditions ,并将 碎斑处理结果 设置为 all_conditions_sieve.tif (位于 exercise_data/raster_analysis/ )。

  3. 阈值 设置为8 (至少八个连续像素),并勾选 使用8向连通

    ../../../_images/raster_sieve_dialog.png

    处理完成后,将加载新图层。

    ../../../_images/sieve_result_incorrect.png

    现在发生了什么呢?答案位于新栅格文件的元数据中。

  4. 图层属性 对话框的 信息 选项卡中查看元数据。请查找 STATISTICS_MINIMUM 的值:

    ../../../_images/sieve_metadata.png

    这个栅格,像其派生,应仅包含值 10 ,但它也有一个非常大的负数。对数据的检查显示,这个数字是一个空值。因为我们只关注未被过滤掉的区域,所以将这些空值设置为零。

  5. 打开 栅格计算器 ,并构建以下表达式:

    (all_conditions_sieve@1 <= 0) = 0
    

    这将维持所有非负值,并将负数设置为零,保持所有值为 1 的区域不变。

  6. 将输出保存在 exercise_data/raster_analysis/ 并命名为 all_conditions_simple.tif

您的输出如下所示:

../../../_images/raster_sieve_correct.png

这就是预期的结果:早期结果的简化版本。请记住,如果从工具中获得的结果与预期不符,那么请查看元数据 (以及矢量属性,如果适用),这对解决问题至关重要。

7.3.10. moderate 跟我做: 重分类栅格

我们使用 栅格计算器 对栅格图层进行计算,还可以使用另一个强大的工具从现有图层提取信息。

回到 aspect 图层。我们现在知道它的数值范围在0到360之间。现在要做的是根据不同的坡向,将该图层 重分类 为其他离散值 (从1到4):

  • 1 = 北 (从 0 到 45 和从 315 到 360)

  • 2 = 东 (从 45 到 135)

  • 3 = 南 (从 135 到 225)

  • 4 = 西 (从 225 到 315)

该运算可以使用栅格计算器来实现,但是公式会变得非常大。

另一种工具是 处理工具箱栅格分析按表格重分类 工具。

  1. 打开工具

  2. 选择 aspect 作为 输入栅格图层

  3. 单击 重分类表... 。将弹出一个类似表格的对话框,您可以在其中为每个类选择最小值、最大值和新值。

  4. 单击 新增行 按钮,添加5行。如下图所示填写每一行内容,然后单击 确定:

    ../../../_images/reclassify_table.png

    该算法用于处理每个类的阈值的方法由 范围边界 定义。

  5. exercise_data/raster_analysis/ 文件夹中将图层保存为 reclassified.tif 文件

    ../../../_images/reclassify_setup.png
  6. 单击 运行

如果将原 aspect 图层与其 重分类 后的进行比较,差别不大。但通过查看图例,可以看到值从 14

让我们给此图层一个更好的样式。

  1. 打开 图层样式 面板

  2. 选择 调色板/唯一值 ,而不是 单波段灰度

  3. 单击 分类 按钮自动获取值并为其分配随机颜色:

    ../../../_images/unique_style.png

输出可能是这样的 (可以有不同的颜色,因为它们是随机生成的):

../../../_images/reclassify_result.png

通过对图层应用此重分类和调色板样式,可以立即区分坡向地区。

7.3.11. basic 跟我做: 查询栅格

与矢量图层不同,栅格图层没有属性表。每个像素包含一个或多个数值 (单波段或多波段栅格)。

我们在本练习中使用的所有栅格图层仅由一个波段组成。根据图层的不同,像素值可能表示高程、坡向或坡度值。

我们如何查询栅格图层获取像素值呢?这可以使用 identify 识别要素 按钮!

  1. 从属性工具栏选择该工具。

  2. 单击 srtm_41_19 图层的随机位置, 识别结果 将显示单击位置的波段值:

    ../../../_images/identify_raster.png
  3. 通过在面板底部的 视图 菜单中选择 表格 ,可以将 识别结果 面板的输出从当前 树形 模式更改为 表格 模式:

    ../../../_images/identify_raster_table.png

单击每个像素获取栅格的值可能会在一段时间后令人烦躁,我们可以使用 Value Tool 插件来解决此问题。

  1. 转到 插件 ► 管理并安装插件...

  2. 全部 选项卡中的搜索框里键入 value t

  3. 选择 Value Tool 插件,按 安装插件 ,然后 关闭 对话框。

    ../../../_images/value_tool.png

    此时将显现新的 Value Tool 面板。

    小技巧

    如果您关闭了面板,可以通过在 视图 ► 面板 ► Value Tool 中启用或单击工具栏中的图标重新打开。

  4. 要使用插件,只需勾选 启用 复选框,并确保 图层 面板中的 srtm_41_19 图层处于激活状态 (已选中)。

  5. 将光标在地图上移动以查看像素值。

    ../../../_images/value_tool_query.png
  6. 但还有很多操作,如: Value Tool 插件允许您在 图层 面板中查询 所有 激活的栅格图层。将 aspectslope 图层再次设置为激活状态,并将鼠标悬停在地图上:

    ../../../_images/value_tool_query_multi.png

7.3.12. In Conclusion

您已经了解了如何从DEM获取各种分析成果,其中包括山体阴影、坡度和坡向计算。还了解了如何使用栅格计算器进一步分析和组合这些结果。最后,您学习了如何重分类图层以及如何查询结果。

7.3.13. What's Next?

现在有两种分析:矢量分析显示可能适合的地块,栅格分析显示可能适合的地形。如何将这些组合起来,从而得出问题的最终结果?这是下一课的主题,从下一个单元开始学习。