Skip to content

24_高级栅格分析 QGIS3

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

高级栅格分析 (QGIS3)

在之前的教程 栅格基本样式设置与分析 (QGIS3) 中,您学习了如何使用 栅格计算器 进行栅格代数运算。本教程在这些技术基础上,向您展示如何使用处理工具箱中的其他栅格分析工具。您将学习如何在 QGIS 中处理土地利用/土地覆盖 (LULC) 栅格数据,以提取特定类型的土地覆盖类别并绘制变化图。

任务概述

我们将使用南非国家土地覆盖数据集来识别和提取南非约翰内斯堡市的非正式定居点。我们还将使用变化评估数据集来识别该城市从 2014 年到 2018 年的城市增长模式。

您将学到的其他技能

  • 如何将栅格数据重投影到另一个投影。
  • 如何在 QGIS 中加载 Excel 文件。
  • 如何在 QGIS 中调整栅格图层的透明度。

获取数据

我们将为本教程下载以下数据集

  1. 南非国家土地覆盖 2018 数据集:新的南非国家土地覆盖 2018 数据集由 20 米分辨率多季节 Sentinel 2 卫星影像生成,包含 73 个土地覆盖类别。
  2. 南非国家土地覆盖 2018 变化评估:此数据集比较了 2014 年至 2018 年间 20 个土地覆盖类别的变化。
  3. 约翰内斯堡市边界:南非约翰内斯堡市的边界 shapefile。

环境地理信息系统 (E-GIS) 提供对南非环境地理空间数据的访问。我们将从此门户下载南非国家土地覆盖 (SANLC) 栅格数据。

  1. 访问 GIS数据下载 页面。点击“我同意”接受 使用条款 并继续。

../../_images/data1.png

  1. 您需要创建一个免费帐户才能下载数据集。点击“我想创建一个帐户”并按照说明创建帐户。

../../_images/data2.png

  1. 登录后,搜索 南非国家土地覆盖 (SANLC) 2018 计算机自动土地覆盖 (CALC)。此数据集以 2 种不同的投影提供。对于本教程,我们将下载 ALBERS 投影的数据集。点击下载 SA_NLC_2018_Albers_CALC_data.zip 文件。

../../_images/data3.png

  1. 接下来,搜索 新南非国家土地覆盖 (SANLC) 2014 和 2018 变化评估数据集计算机自动土地覆盖 (CALC),并点击 SA_NLC_2014_2018_CLASS_CHANGE_CALC (DATASET AND REPORT) 下载 SA_NLC_2014_2018_CLASS_CHANGE_ALBERS_CALC.tif.vat.zip 文件。

../../_images/data4.png

约翰内斯堡市 作为 约翰内斯堡空间发展框架 2040 (SDF) 数据的一部分发布空间数据集。我们将从该网站下载边界 shapefile。

  1. 点击下载链接 http://bit.ly/joburg-sdf-16

../../_images/data5.png

  1. 点击 SDF Shapefiles 目录。

../../_images/data6.png

  1. 下载 SDF Shapefiles.zip 文件,并将其解压到一个文件夹中。

../../_images/data7.png

为方便起见,可从以下链接获取所需图层的裁剪版本:

SA_NLC_2018_ALBERS_CALC.tif

SA_NLC_2014_2018_CLASS_CHANGE_ALBERS_CALC.tif

COJ_Boundary.zip

数据来源:[SANLC] [COJ]

操作步骤

  1. 在浏览器中浏览到已下载并解压的文件夹。展开它,并将 SA_NLC_2018_ALBERS_CALC.tif 拖放到画布中。

../../_images/011.png

  1. 加载图层后,您会注意到右下角的 CRS 将显示为“未知 CRS”。双击它以打开“项目属性 - CRS”对话框。

../../_images/021.png

  1. 在底部,您将看到投影范围的预览。此“未知 CRS”是为南非定义的自定义 兰伯特等积投影。稍后我们将把此图层重新投影到另一个投影。点击确定。

../../_images/031.png

  1. 加载另外两个图层 SA_NLC_2014_2018_CLASS_CHANGE_ALBERS_CALC.tifCOJ_Boundary。您将看到栅格图层覆盖了整个国家。对于我们的分析,我们只对 COJ_Boundary 图层覆盖的区域感兴趣。现在,我们将栅格图层裁剪到此区域。转到 Processing(处理) ‣ Toolbox(工具箱) ‣ GDAL ‣ Raster extraction(栅格提取) ‣ Clip raster by mask layer(按掩膜图层裁剪栅格) 工具。双击打开它。

../../_images/041.png

  1. 在“按掩膜图层裁剪栅格”对话框中,选择 SA_NLC_2018_ALBERS_CALC 作为 Input layer(输入图层),然后选择 COJ_Boundary 作为 Mask layer(掩膜图层)。我们还有一个选项可以将数据重新投影到另一个投影。将所有数据图层保持在同一个投影中是一个好习惯。我们将重新投影栅格,使其 CRS 与 COJ_Boundary 图层的 CRS 相匹配。选择 EPSG:4326 - WGS 84 作为 Target CRS(目标 CRS)。

../../_images/051.png

  1. 默认的输出数据格式是 GeoTiff。如果未压缩,GeoTiff 文件可能会非常大。一个好的做法是在创建新的栅格图层时始终应用无损压缩。展开 Advanced Parameters(高级参数) 并选择 High Compression(高压缩) 作为 Profile(配置文件)。接下来,点击 Clipped (mask)(裁剪(掩膜)) 旁边的 ... 按钮,选择 Save to file…(保存到文件…) 并输入图层名称为 SA_NLC_2018_Clipped。点击 Run(运行)。

../../_images/061.png

  1. 算法完成后,不要关闭窗口。我们将对另一个栅格图层应用相同的操作。切换到 Parameters(参数) 选项卡,将 Input layer(输入图层) 更改为 SA_NLC_2014_2018_CLASS_CHANGE_ALBERS_CALC。保留所有其他选项,但将输出图层名称更改为 SA_NLC_2014_2018_CLASS_CHANGE_Clipped。点击 Run(运行)。

../../_images/071.png

  1. 两个裁剪后的图层现在将加载到画布中。选择原始图层并点击 Remove Layer(移除图层) 来移除它们。

../../_images/081.png

  1. 所有剩余的三个图层现在都处于同一个 CRS 中。现在我们可以将项目 CRS 切换到这些图层的 CRS。右键单击任何裁剪后的图层,然后选择 Layer CRS(图层 CRS) ‣ Set Project CRS from Layer(从图层设置项目 CRS)。

../../_images/091.png

  1. 现在项目 CRS 将设置为 EPSG:4326。将 SA_NLC_2018_Clipped 图层置于顶部。

../../_images/101.png

  1. 点击 SA_NLC_2018_Clipped,使用 Attributes Toolbar(属性工具栏) 中的识别工具点击图像并检查像素值。您会看到像素值范围从 1 到 73。这些值代表不同的土地利用/土地覆盖类别。

../../_images/111.png

  1. 数据集类别在 SANLC 2018 Presentation 中有描述,可以从 EGIS 门户 下载。对于本练习,我们感兴趣的是由类别编号 51 到 54 表示的 非正式定居点

../../_images/121.png

  1. 让我们提取属于这些类别的像素。转到 Processing(处理) ‣ Toolbox(工具箱) ‣ Raster analysis(栅格分析) ‣ Raster calculator(栅格计算器) 工具。双击打开它。

../../_images/13.png

  1. 点击 Input layers(输入图层) 旁边的 ... 按钮。选择 SA_NLC_2018_Clipped 图层,然后点击确定。接下来,点击 ε 按钮打开表达式窗口。

../../_images/14.png

  1. 输入以下表达式以选择 51-54 类别的像素。源图像只有 1 个波段。@1 后缀表示波段编号。点击确定关闭表达式窗口。

bash "SA_NLC_2018_Clipped@1" >= 51 AND "SA_NLC_2018_Clipped@1" <= 54

../../_images/15.png

  1. 接下来,点击 Calculated(计算结果) 旁边的 ... 按钮并选择 Save to File…(保存到文件…)。

../../_images/16.png

  1. 将输出文件命名为 residential_informal.tif 并点击 Run(运行)。

../../_images/17.png

  1. 处理完成后,一个新图层 residential_informal 将被添加到 QGIS。此栅格图层只有两个像素值 - 在我们的表达式评估为 的地方为 1,在 的地方为 0。显示为白色的像素是属于非正式定居点类别的像素。我们将更好地样式化此图层,以便清晰地看到非正式定居点。点击“打开图层样式设置面板”按钮。

../../_images/18.png

  1. 选择 residential_informal 图层,并将渲染器更改为 Paletted/Unique values(调色板/唯一值)。点击 Add values manually(手动添加值) (+) 按钮。

../../_images/19.png

  1. 将值更改为 1 并输入 Residential Informal(非正式居住区) 作为标签。选择您喜欢的颜色。

../../_images/20.png

  1. 我们现在可以看到约翰内斯堡市的所有非正式定居点。结合底图查看会很有帮助。我们可以从 QuickMapServices 插件访问各种底图。安装插件后,转到 Web ‣ QuickMapServices ‣ OSM ‣ OSM Standard(OSM 标准) 以添加 OpenStreetMap 图层。

../../_images/21.png

  1. 现在您可以轻松识别并验证我们的分析是否正确识别了非正式定居点。您可以选择 residential_informal 图层,并在“图层样式设置面板”中切换到 Transparency(透明度) 选项卡。您可以降低 Global Opacity(全局不透明度) 以同时看到提取的像素和底图。

../../_images/22.png

  1. 您现在已经完成了教程的第一部分。现在我们将使用 SA_NLC_2014_2018_CHANGE_Clipped 栅格图层来识别 2014 年至 2018 年间城市化的区域。关闭除 SA_NLC_2014_2018_CHANGE_Clipped 之外的所有图层,然后点击“打开图层样式设置面板”按钮。切换到 Transparency(透明度) 选项卡,并在 Additional no data value(附加无数据值) 中输入 0。这将使值为 0 的像素变为透明。

../../_images/23.png

  1. 使用 Attributes Toolbar(属性工具栏) 中的 Identify(识别) 工具点击图像并检查像素值。您会看到像素值范围从 21 到 420。每个值表示从 73 个源类别之一到另一个类别的转换。

../../_images/24.png

  1. 您的数据下载附带一个名为 lcccodes.xlsx 的电子表格。此表格有一个 03 urban_change_codes 工作表,提供了每个像素值的更多详细信息。我们对所有 2014 年任何类别转变为 2018 年建成区类别的像素值感兴趣。在下图中,这些以蓝色高亮显示。

../../_images/25.png

  1. 我们的目标是绘制建成区类别的变化。我们将对 SA_NLC_2014_2018_CHANGE_Clipped 图层应用转换,以便将所有像素值从其原始值映射到以下任一值。
1 在 2014 年和 2018 年都属于建成区类别的所有像素
2 在 2014 年属于非建成区类别、在 2018 年转变为建成区类别的所有像素。
0 所有剩余的像素
  1. 为此,我们需要创建一个指定这些规则的表。由于 QGIS 可以直接读取电子表格,这是创建此表最方便的方法。我们的电子表格应有 3 列:MINMAXOUTPUT。每一行应是一个输入栅格值的范围,该范围应分配一个输出值。创建如下所示的电子表格,并将其保存到您的计算机,命名为 reclass.xlsx。您也可以从此链接下载一个现成的副本 - reclass.xlsx

../../_images/27.png

  1. 在浏览器中找到 reclass.xlsx 文件。将其拖放到主窗口中。

../../_images/28.png

  1. 一个新图层 Sheet1 将被添加到图层面板。右键单击它并选择 Open Attribute Table(打开属性表)。验证表格是否正确导入,并且您拥有名为 MINMAXOUTPUT 的 3 列。打开 Processing Toolbox(处理工具箱) ‣ Reclassify by layer(按图层重分类) 工具。

../../_images/29.png

  1. 在“按图层重分类”对话框中,选择 SA_NLC_2014_2018_CHANGE_Clipped 作为 Raster layer(栅格图层)。选择 Sheet1 作为 Layer containing class breaks(包含类别中断的图层)。为各自字段选择 MINMAXOUTPUT 字段。

../../_images/30.png

  1. 展开 Advanced Parameters(高级参数) 部分。将 Range boundaries(范围边界) 更改为 min <= value <= max。点击 Reclassified raster(重分类栅格) 的 … 按钮,并输入输出文件名称为 builtup_change.tif。点击 Run(运行)。

../../_images/31.png

  1. 处理完成后,一个具有像素值 0-2 的新图层 builtup_change 将被添加到画布中。在“图层样式设置面板”中,选择 Paletted/Unique values(调色板/唯一值),然后点击 Classify(分类)。

../../_images/32.png

  1. 为每个类别选择您喜欢的颜色,并将像素值 012 分别标记为 Non Built-up(非建成区)、Existing Built-up(现有建成区) 和 New Built-up(新建建成区)。

../../_images/33.png

  1. 现在,在 Transparency(透明度) 选项卡中,降低 Global Opacity(全局不透明度),并打开 OSM Standard(OSM 标准) 图层,以同时看到 builtup_change 像素和底图。

../../_images/34.png


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