8.4. 课: 补充练习

在本课,您将在QGIS中引导完成完整的GIS分析。

备注

本课由 Linfiniti Consulting (南非) 和 Siddique Motala (开普半岛科技大学) 共同开发

8.4.1. 问题陈述

您的任务是在开普半岛及其周边寻找适合珍稀植物凡波斯物种栖息地的区域。调查范围涵盖开普敦和位于北部Melkbosstrand及南部Strand之间的开普敦半岛。植物学家为您提供了有关物种的以下特性:

  • 生长在朝东的山坡上

  • 山坡坡度在 15% 和 60% 之间

  • 年总降雨量 > 1000 毫米的地区

  • 距离人类居住区至少250米

  • 植被面积至少应为6000平米的区域

作为这所大学的学生,您已同意在四个不同的适宜土地寻找这种植物,并希望这四个适生区是最靠近您居住的开普敦大学。使用所学的GIS技术来确定应该去哪里寻找。

8.4.2. 方案概要

本练习数据可在 exercise_data/more_analysis 文件夹找到。

您将找到离开普敦大学最近的四个适生区。

解决方案包括:

  1. 分析DEM栅格图层,找到朝东的山坡并具有合适坡度的斜坡

  2. 分析雨量栅格图层,找到适合降雨量的地区

  3. 分析分区矢量图层,找到远离人类居住区且大小合适的区域

8.4.3. 跟我做: 设置地图

  1. 单击屏幕右下角的 projectionEnabled 当前CRS 按钮。在出现的对话框 CRS 选项卡中,使用 "过滤器" 工具搜索 "33S" 。选择条目 WGS 84 / UTM zone 33S (EPSG代码 32733 )。

  2. 单击 确定

  3. 单击 fileSave 保存工程 工具栏按钮保存工程文件,或使用 文件 ► 另存为... 菜单项。

    将其保存在一个名为 Rasterprac 的新目录中,您应该在计算机上的某个位置创建该目录,此目录还要保存将要创建的图层。保存工程为 your_name_fynbos.qgs

8.4.4. 将数据加载到地图

为了处理数据,需要将必要的图层 (街道名、分区、降雨量、DEM、行政区) 加载到地图画布。

矢量数据...

  1. 单击 数据源管理器工具栏 中的 dataSourceManager 打开数据源管理器 按钮,并在出现的对话框中启用 addOgrLayer 矢量 选项卡,或使用 图层 ► 添加图层 ► addOgrLayer 添加矢量图层... 菜单项。

  2. 确保已选择 radioButtonOn 文件

  3. 单击 ... 按钮浏览矢量数据集。

  4. 在出现的对话框中,打开 exercise_data/more_analysis/Streets 目录。

  5. 选择文件 Street_Names_UTM33S.shp

  6. 单击 打开

    该对话框关闭后并显示原对话框,在 矢量数据集 旁边的文本字段中给定了文件路径,这样可以确保选择了正确的文件。如果您愿意,也可以在该字段手动输入文件路径。

  7. 单击 添加 ,矢量图层将加载到地图中。它的颜色是自动分配的,您稍后要进行更改。

  8. 将图层重命名为 Streets

    1. 图层 面板右键单击该图层 (默认情况下,屏幕左侧的窗格)。

    2. 在出现的快捷菜单中单击 重命名图层 并进行重命名,完成后按 Enter 键。

  9. 重复矢量添加过程,但这次选择的是 Zoning 目录中的 Generalised_Zoning_Dissolve_UTM33S.shp 文件。

  10. 重命名为 Zoning

  11. 将矢量图层 admin_boundaries/Western_Cape_UTM33S.shp 加载到地图。

  12. 重命名为 Districts

栅格数据...

  1. 单击 dataSourceManager 打开数据源管理器 按钮,并在出现的对话框中启用 addRasterLayer 栅格 选项卡,或使用 图层 ► 添加图层 ► addRasterLayer 添加栅格图层... 菜单项。

  2. 确保已选择 radioButtonOn 文件

  3. 导航到相应的文件,选择栅格数据并单击 打开

  4. DEM/SRTM.tifrainfall/reprojected/rainfall.tif 两个栅格文件中的每一个都执行上述操作。

  5. 将SRTM栅格重命名为 DEM ,rainfall 栅格重命名为 Rainfall (首字母大写)。

8.4.5. 更改图层顺序

图层 面板单击并上下拖动图层,更改它们在地图上的显示顺序,以便可以看到尽可能多的图层。

现在,所有数据都已加载并正确可见,分析就可以开始了。最好先执行裁剪运算,这样就不会浪费处理资源来计算那些无论如何都不会被使用区域的值。

8.4.6. 查找正确的地区

鉴于上述调查区域,需要将我们的地区限制为以下地区:

  • Bellville

  • Cape

  • Goodwood

  • Kuils River

  • Mitchells Plain

  • Simon Town

  • Wynberg

  1. 图层 面板中的 Districts 图层上右键单击。

  2. 在出现的菜单中,选择 过滤... 菜单项。此时会出现 查询构建器 对话框。

  3. 现在,您将构建一个查询仅选择候选地区:

    1. 字段 列表,双击 NAME_2 字段,使其出现在下面的 SQL where clause 文本字段中。

    2. 单击 IN 按钮将其追加到SQL查询。

    3. 打开括号。

    4. 单击 (当前为空) 列表下方的 全部 按钮。

      短暂延迟后,将用所选字段 (NAME_2) 的值填充 列表。

    5. 双击 列表中的值 Bellville ,将其追加到SQL查询中。

    6. 添加逗号并双击值列表添加 Cape 地区。

    7. 对其余地区重复上一步进行添加。

    8. 关闭括号。

      最终的查询应该是 (括号中的地区顺序无关紧要):

      "NAME_2" in ('Bellville', 'Cape', 'Goodwood', 'Kuils River',
                   'Mitchells Plain', 'Simon Town', 'Wynberg')
      

      备注

      也可以使用 OR 运算符,查询如下所示:

      "NAME_2" = 'Bellville' OR "NAME_2" = 'Cape' OR
      "NAME_2" = 'Goodwood' OR "NAME_2" = 'Kuils River' OR
      "NAME_2" = 'Mitchells Plain' OR "NAME_2" = 'Simon Town' OR
      "NAME_2" = 'Wynberg'
      
    9. 单击 确定 两次。

      地图中显示的地区现在仅限于上面列表中的地区。

8.4.7. 裁剪栅格

现在您已经有了关注区,可以将栅格裁剪到此区域。

  1. 选择菜单项 栅格 ► 提取 ► 按掩膜图层裁剪栅格... ,打开裁剪对话框。

  2. 输入图层 下拉列表中,选择 DEM 图层。

  3. 掩膜图层 下拉列表中,选择 Districts 图层。

  4. 向下滚动,通过单击 ... 按钮并选择 保存到文件... ,在 已裁剪 (掩膜) 文本字段中指定输出位置。

    1. 导航到 Rasterprac 目录

    2. 输入文件名 - DEM_clipped.tif

    3. 保存

  5. 确保已勾选 checkbox 执行算法后打开输出文件

  6. 单击 运行

    裁剪运算完成后,让 按掩膜图层裁剪栅格 对话框处于打开状态,便于能够重新使用裁剪区域。

  7. 输入图层 下拉列表中选择 Rainfall 栅格图层,并将输出保存为 Rainfall_clipped.tif

  8. 其他选项不要更改,然后单击 运行

  9. 第二次裁剪运算完成后,可以关闭 按掩膜图层裁剪栅格 对话框。

  10. 保存地图

对齐栅格

为了进行分析,我们需要栅格具有相同的CRS,并且它们必须对齐。

首先,我们将降雨数据的分辨率更改为30米 (像素大小):

  1. 图层 面板,确保 Rainfall_clipped 是活动图层 (即,单击可高亮显示)

  2. 单击 栅格 ► 投影 ► 变形 (重投影)... ,打开 变形 (重投影) 对话框

  3. 要使用的重采样方法 ,从下拉菜单中选择 双线性

  4. 设置 以目标地理参考单位表示的输出文件分辨率30

  5. 向下滚动至 重投影 ,在您的 rainfall/reprojected 目录中保存输出为 Rainfall30.tif

  6. 确保已勾选 checkbox 执行算法后打开输出文件

然后我们对齐DEM:

  1. 图层 面板,确保 DEM_clipped 是活动图层 (即,单击可高亮显示)

  2. 单击 栅格 ► 投影 ► 变形 (重投影)... ,打开 变形 (重投影) 对话框

  3. 目标CRS ,从下拉菜单中选择 工程CRS: EPSG:32733 - WGS 84 / UTM zone 33S

  4. 要使用的重采样方法 ,从下拉菜单中选择 双线性

  5. 设置 以目标地理参考单位表示的输出文件分辨率30

  6. 向下滚动到 新建输出文件配准后的范围 ,使用文本框右侧的按钮选择 从图层计算 ► Rainfall30

  7. 向下滚动至 重投影 ,在您的 DEM/reprojected 目录中保存输出为 DEM30.tif

  8. 确保已勾选 checkbox 执行算法后打开输出文件

为了正确看到发生的变化,需要更改图层的符号。

8.4.8. 更改矢量图层的符号

  1. 图层 面板,右键单击 Streets 图层

  2. 从出现的菜单中选择 属性

  3. 在出现的对话框中切换到 符号化 选项卡

  4. 单击顶部控件中的 填充 条目

  5. 在下面的列表中选择符号或设置新符号 (颜色、透明度等)

  6. 单击 确定 关闭 图层属性 对话框。这将更改 Streets 图层的渲染

  7. Zoning 图层执行类似的处理,并为其选择合适的颜色

8.4.9. 更改栅格图层的符号

栅格图层符号有点不同。

  1. 打开 Rainfall30 栅格图层的 属性 对话框

  2. 切换到 符号化 选项卡。您会注意到,此对话框与用于矢量图层的样式大不一样。

  3. 展开 最小/最大值设置

  4. 确保选择了 均值 +/- 标准差 按钮

  5. 确保关联框中的值为 2.00

  6. 为了 对比度增强 ,确保显示为 拉伸至极小极大

  7. 对于 颜色梯度 ,将其更改为 白到黑

  8. 单击 确定

    Rainfall30 栅格 (如果可见) 应该会改变颜色,使您可以看到每个像素的不同亮度值

  9. DEM30 图层重复相同的处理,但将用于拉伸的标准差设置为 4.00

8.4.10. 清理地图

  1. 图层 面板移除原 RainfallDEM 图层,以及 Rainfall_clippedDEM_clipped

    • 在这些图层上右键单击,然后选择 移除图层

      备注

      这不会从存储设备删除数据,只是将其从地图中移除。

  2. 保存地图

  3. 现在可以通过取消勾选 图层 面板中矢量图层旁边的框来隐藏它们。这将使地图渲染速度更快,并为您节省一些时间

8.4.11. 创建山体阴影

为了创建山体阴影,您需要使用为此目的而编写的算法。

  1. 图层 面板,确保``DEM30`` 是活动图层 (即,单击可高亮显示)

  2. 单击 栅格 ► 分析 ► 山体阴影... 菜单项,打开 山体阴影 对话框

  3. 向下滚动到 山体阴影 ,在您的 Rasterprac 目录中保存输出为 hillshade.tif

  4. 确保已勾选 checkbox 执行算法后打开输出文件

  5. 单击 运行

  6. 等待完成处理

新的 hillshade 图层已出现在 图层 面板。

  1. 图层 面板中的 hillshade 图层上右键单击,然后打开 属性 对话框

  2. 单击 透明度 选项卡,将 全局不透明度 滑动条设置为 20%

  3. 单击 确定

  4. 请注意,透明山体阴影叠加在裁剪后的DEM时的效果。您可能需要更改图层的顺序,或单击 Rainfall30 图层查看效果

8.4.12. 坡度

  1. 单击 栅格 ► 分析 ► 坡度... 菜单项,打开:guilabel:坡度 算法对话框

  2. 选择 DEM30 作为 输入图层

  3. 勾选 checkbox 用百分比而不是度来表示坡度 。坡度可以用不同的单位 (百分比或度) 表示。评估条件表明,适合的植物生长的坡度在15%到60%之间的斜坡上。所以需要确保我们的坡度数据是用百分比表示

  4. 为您的输出指定适当的文件名和位置

  5. 确保已勾选 checkbox 执行算法后打开输出文件

  6. 单击 运行

坡度图像已计算并添加到地图中。和往常一样,是以灰度渲染的。将符号更改为更有趣的符号:

  1. 打开图层 属性 对话框 (通常使用图层的右键单击菜单)

  2. 单击 符号化 选项卡

  3. 在显示 单波段灰度 的地方 ( 渲染类型 下拉菜单中),请将其更改为 单波段伪彩色

  4. 最小/最大值设置 选择 均值 +/- 标准差 x ,其值为 2.0

  5. 选择适当的 颜色渐变

  6. 单击 运行

8.4.13. 试一试 坡向

使用与计算坡度相同的方法,在 栅格 ► 分析 菜单中选择 坡向...

请记住定期保存工程。

8.4.14. 重分类栅格

  1. 选择 栅格 ► 栅格计算器...

  2. 指定 Rasterprac 目录作为 输出图层 的位置 (单击 ... 按钮),并将其保存为 slope15_60.tif

  3. 确保选中 执行算法后打开输出文件 的方框

    在左侧的 栅格波段 列表中,显示您在 图层 面板看到的所有栅格图层。如果您的坡度图层被称为 slope ,它将被列为 slope@1 ,表示坡度栅格的波段是 1 。

  4. 坡度需要介于 1560 度之间。

    使用界面中的列表项和按钮,构建以下表达式:

    (slope@1 > 15) AND (slope@1 < 60)
    
  5. 输出图层 字段设置为适当的位置和文件名。

  6. 单击 运行

现在使用同样的方法找到正确的坡向 (朝东: 45135 度)。

  1. 构建以下表达式:

    (aspect@1 > 45) AND (aspect@1 < 135)
    

当生成栅格中所有朝东的斜坡都是白色时,您就会知道它起作用了 (就像被早晨的阳光照亮一样)。

使用同样的方法找到符合要求的降雨量 (大于 1000 毫米)。使用以下表达式:

Rainfall30@1 > 1000

现在,在单独的栅格中分别拥有所有三个条件,您需要将它们组合起来,便于查看哪些区域满足所有条件。为此,栅格将彼此相乘。产生这种情况时,所有重叠像素的值为 1 时将保留 1 的值 (即位置符合要求),但如果三个栅格中的任何一个像素的值为 0 (即位置不符合条件),则结果将为 0 。这样,结果将只包含满足所有适合条件的重叠区域。

8.4.15. 组合栅格

  1. 打开 栅格计算器 (栅格 ► 栅格计算器...)

  2. 构建以下表达式 (为图层使用适当的名称):

    [aspect45_135] * [slope15_60] * [rainfall_1000]
    
  3. 将输出位置设置为 Rasterprac 目录

  4. 将输出栅格命名为 aspect_slope_rainfall.tif

  5. 确保已勾选 checkbox 执行算法后打开输出文件

  6. 单击 运行

新栅格现在可以正确显示满足所有三个条件的区域。

保存工程。

需要满足的下一个条件是,该区域必须距离市区 250 米。将通过确保我们计算的面积在农村地区内,并且距离该地区边缘250米或以上来满足这一要求。因此,需要首先找到所有的农村地区。

8.4.16. 寻找农村地区

  1. 图层 面板隐藏所有图层

  2. 取消隐藏 Zoning 矢量图层

  3. 右键单击并打开 属性表 对话框。请注意,这片土地有许多不同的分区方式,我们想分离农村地区。关闭属性表

  4. 右键单击 Zoning 图层并选择 过滤... ,打开 查询构建器 对话框

  5. 构建以下查询:

    "Gen_Zoning" = 'Rural'
    

    如果您遭到困难,请参阅前面的操作指南。

  6. 单击 确定 关闭 查询构建器 对话框。查询应该返回一个要素

应该可以从 Zoning 图层看到表示农村的多边形。您需要进行保存。

  1. Zoning 图层的右键单击菜单中,选择 导出 ► 要素另存为...

  2. 将图层保存在 Rasterprac 目录中

  3. 命名输出文件为 rural.shp

  4. 单击 确定

  5. 保存工程

现在需要排除距离农村地区边缘 250米 以内的区域,这通过创建负缓冲区来实现。如下所述。

8.4.17. 创建负缓冲区

  1. 单击菜单项 矢量 ► 地理处理工具 ► 缓冲区...

  2. 在出现的对话框中,选择 rural 图层作为输入矢量图层 (不应勾选 仅选中的要素 )

  3. 距离 设置为 -250 ,负值表示缓冲区将是一个内部缓冲区。确保下拉菜单中的单位为米。

  4. 勾选 checkbox 融合结果

  5. 缓冲区建立后 ,将输出文件保存在 Rasterprac 目录中,并将其命名为 rural_buffer.shp

  6. 单击 保存

  7. 单击 运行 并等待完成数据处理

  8. 关闭 缓冲区 对话框

    为确保您的缓冲区正常工作,请注意 rural_buffer 图层与 rural 图层的差异。为了观察差异,可能需要更改绘图顺序。

  9. 移除 rural 图层

  10. 保存工程

现在,您需要将 rural_buffer 矢量图层与 aspect_slope_rainfall 栅格相结合。要将它们组合起来,我们需要更改其中一个图层的数据格式。在这种情况下,您将对栅格进行矢量化,因为在计算面积时,矢量图层更方便。

8.4.18. 矢量化栅格

  1. 单击菜单项 栅格 ► 转换 ► 栅格矢量化 (栅格转矢量)...

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

  3. 新建字段名称 设置为 suitable (默认字段名为 DN - Digital Number 数据)

  4. 保存输出。在 矢量化 中选择 文件另存为 ,将位置设置为 Rasterprac ,并命名文件为 aspect_slope_rainfall_all.shp

  5. 确保已勾选 checkbox 执行算法后打开输出文件

  6. 单击 运行

  7. 数据处理完成后关闭对话框

栅格的所有区域都已矢量化,因此只需在 suitable 的字段中选择值为 1 的区域 (数字量化值 - Digital Number)。

  1. 打开新矢量图层的 查询构建器 对话框 (右键单击 - 过滤...)

  2. 构建此查询:

    "suitable" = 1
    
  3. 单击 确定

  4. 确定查询完成后 (只有满足所有三个条件的区域,即值为 1 的区域可见),从结果新建矢量文件,在图层的右键单击菜单中使用 导出 --> 要素另存为...

  5. 将该文件保存在 Rasterprac 目录中

  6. 命名文件为 aspect_slope_rainfall_1.shp

  7. 从地图中移除 aspect_slope_rainfall_all 图层

  8. 保存您的工程

当我们使用算法对栅格进行矢量化时,有时该算法会产生所谓的 "无效几何图形" ,即存在空多边形,或其中存在错误的多边形,这将在未来很难进行分析。所以,我们需要使用 "修正几何图形" 工具。

8.4.19. 修正几何图形

  1. 处理工具箱 搜索并 执行... "修正几何图形"

  2. 对于 输入图层 请选择 aspect_slope_rainfall_1

  3. 已修正几何图形 中选择 文件另存为 ,将输出保存到 Rasterprac ,并将文件命名为 fixed_aspect_slope_rainfall.shp

  4. 确保已勾选 checkbox 执行算法后打开输出文件

  5. 单击 运行

  6. 数据处理完成后关闭对话框

现在,已经对栅格进行了矢量化,并修复了生成的几何图形,可以通过 fixed_aspect_slope_rainfall 图层和 rural_buffer 图层的交集,将坡向、坡度和降雨条件与距离人类居住区条件进行组合。

8.4.20. 确定矢量的交集

  1. 单击菜单项 矢量 ► 地理处理工具 ► 相交...

  2. 在出现的对话框中,选择 rural_buffer 图层作为 输入图层

  3. 对于 叠加图层 ,选择 fixed_aspect_slope_rainfall 图层

  4. 相交 中,将输出文件保存在 Rasterprac 目录

  5. 将输出文件命名为 rural_aspect_slope_rainfall.shp

  6. 单击 保存

  7. 单击 运行 并等待完成数据处理

  8. 关闭 相交 对话框

    请注意仅保留重叠区域,以确保您的相交处理正确。

  9. 保存工程

列表中的下一个条件是面积必须大于 6000 平米。现在,您将计算多边形区域,以确认适合此工程的区域大小。

8.4.21. 计算每个多边形的面积

  1. 打开新矢量图层的右键单击菜单

  2. 选择 打开属性表

  3. 单击表格左上角的 toggleEditing 切换编辑模式 按钮,或按 Ctrl+E

  4. 单击表格顶部工具栏的 calculateField 打开字段计算器 按钮,或按 Ctrl+I

  5. 在出现的对话框中,确保勾选了 checkbox 新建字段 ,并将 输出字段名称 设置为 area ,输出字段类型应为小数 (实型),将 精度 设置为 1 (一位小数)。

  6. 表达式 文本框中,键入:

    $area
    

    这意味着字段计算器将计算矢量图层中每个多边形的面积,然后用计算值填充一个新的整型列 (称为 area)。

  7. 单击 确定

  8. 对另一个名为 id 的新字段执行同样的操作。在 字段计算器表达式 中,键入:

    $id
    

    这样可以确保每个多边形都有一个唯一的ID,便于识别。

  9. 再次单击 toggleEditing 切换编辑模式 ,并在提示时保存编辑

8.4.22. 选择给定大小的区域

现在,这些区域都已经知道了:

  1. 构建查询 (像之前一样),只选择大于 6000 平米的多边形。查询是:

    "area" > 6000
    
  2. Rasterprac 目录保存选择并命名为 suitable_areas.shp 的新矢量图层。

现在,已经拥有了满足稀有植物凡波斯所有生活环境符合条件的区域,您将从中选择离开普敦大学最近的四个区域。

8.4.23. 数字化开普敦大学

  1. 和之前一样,在 Rasterprac 目录中新建一个矢量图层,但这次,使用 作为 几何图形类型 ,并将其命名为 university.shp

  2. 确保其是合适的CRS (工程CRS:EPSG:32733 - WGS 84 / UTM zone 33S)

  3. 完成创建新图层 (单击 确定)

  4. 隐藏除新建 university 图层和 Streets 图层之外的所有图层

  5. 添加背景地图 (OSM):

    1. 转到 浏览器 面板并导航至 XYZ Tiles ► OpenStreetMap

    2. OpenStreetMap 条目拖放到 图层 面板的底部

    使用您的互联网浏览器,查找开普敦大学的位置。鉴于开普敦独特的地形,该大学位于非常知名的位置。在返回QGIS之前,请注意大学所在的位置,以及附近的情况。

  6. 确保已单击 Streets 图层,并且 图层 面板中高亮显示 university 图层

  7. 导航至 视图 ► 工具栏 菜单项,并确保已选中 数字化工具栏 。然后您会看到一个带有铅笔的工具栏图标 (toggleEditing 切换编辑模式) 。这是 切换编辑 按钮

  8. 单击 切换编辑模式 按钮进入 编辑模式 。这允许您编辑矢量图层

  9. 单击 capturePoint 添加点要素 按钮,该按钮应位于 toggleEditing 切换编辑模式 按钮附近

  10. 激活 添加要素 工具后,左键单击开普敦大学位置的最佳估计值

  11. 当要求输入 id 时,请提供任意整数

  12. 单击 确定

  13. 单击 saveEdits 保存图层编辑 按钮

  14. 单击 切换编辑模式 按钮停止编辑会话

  15. 保存工程

8.4.24. 查找距离普敦大学最近的位置

  1. 转到 处理工具箱 ,找出并执行 按最近的方式连接属性 算法 (矢量通用 ► 按最近的方式连接属性)

  2. 输入图层 应为 university输入图层 2suitable_areas

  3. 设置适当的输出位置和名称 (被连接图层)

  4. 最大近邻 设置为 4

  5. 确保已勾选 checkbox 执行算法后打开输出文件

  6. 保留其余参数的默认值

  7. 单击 运行

生成的点图层将包含四个要素 - 它们都将具有大学的位置及其属性,此外,附近合适区域的属性 (包括 id ) 以及到该位置的距离。

  1. 打开连接结果的属性表

  2. 记录四个最近合适区域的 id ,然后关闭属性表

  3. 打开 suitable_areas 图层的属性表

  4. 构建查询,以选择离大学最近的四个合适区域 (使用 id 字段选择它们)

这是本课探索问题的最终答案。

提交时,请创建完整标注的布局,其中包括半透明的山体阴影图层,覆盖在您选择的引人入胜的栅格上 (例如DEM或坡度栅格)。还包括大学和 suitable_areas 图层,突出显示离大学最近的四个合适区域。在创建输出地图时,应遵循所有制图的最好做法。