利用处理建模自动执行复杂的工作流程

警告

本教学已有新的版本,请前往 利用处理建模自动执行复杂的工作流程 (QGIS3)

GIS 操作通常包含许多步骤,上一步骤的输出会被拿来当作下一步骤的输入。如果你想改变输入资料或调整操作中的参数,可能就需要手动把整套操作重新跑一遍。幸运的是,QGIS 有内建的图形建模,可以用来定义操作中的各步骤,然后以非常简单的方式执行。你也可以使用它来进行批次处理,把很多的输入档一次完成。

内容说明

本教学示范如何制作建模,从「土地利用分类」的影像档中取出特定的分类区域。

取得资料

我们要使用 全球土地复盖设施(Global Land Cover Facility, GLCF)提供的 标准 MODIS 全球拼合之土地复盖资料(Global Mosaics of the standard MODIS land cover type data )作为示例。

警告

在 2018 年 12 月 31 日之后,GLCF 关闭了网站服务,因此本教学所需要的档案已经无法存取了。

如果你想依照本教学的内容操作,可以直接用下面的连结下载这两份资料集:

LC_hd_global_2001.tif.gz

LC_hd_global_2012.tif.gz

资料来源 [GLCF_MODIS]

操作流程

本练习的流程分成下列几个步骤:

  • 对输入的土地复盖分类影像进行 Majority Filter 操作,此操作会删除独立的像素点,达到降噪的效果。

  • 转换输出的影像档至多边形图层。

  • 在多边形图层的属性表格中查询某个类别值,然后再为这个类别独立制作新的向量图层。

下列步骤描绘出如何处理上述操作、摆到建模内,然后执行在下载的资料上。

  1. 打开 QGIS,选择 地理运算 ‣ 图形建模器

../_images/1181.png
  1. 图形建模器 的视窗分成左侧的工具列和右侧的主视窗。在左侧的工具列中选择 输入 分页,然后拖曳 + Raster layer 到主视窗中。

../_images/2138.png
  1. 有个 参数定义 的视窗会跳出来,在 参数名称 栏输入 Input,然后在 必要(Required) 栏位中选择 ,按下 确定

../_images/377.png
  1. 主视窗中这时会出现一个叫做 Input 的框框,它代表我们等一下要使用的土地复盖分类的影像资料。下一步是加上 Majority filter 的运算。点选左下角的 演算法 以切换左侧分页,然后使用搜寻功能找到此函数,它应该会放在 SAGA 的 Grid - Filter 分类中。把它拖到主视窗中。

注解

如果你找不到此运算法或其他在本教学中提到的运算法,你可能是用到了地理运算工具列的 Simplified Interface。在地理运算工具列的底部有个下拉式选单,在此改为 Advanced Interface 即可。

../_images/455.png
  1. Majority Filter 的细节设定视窗会跳出,让所有的选项保持预设,直接按下 确定

../_images/556.png
  1. 现在主画面又多了一个 Majority Filter 的框框,除此之外还有一条线与 Input 框连在一起,代表 Majority Filter 的输入会使用 Input 框的影像资料。下一个步骤是把 Majority Filter 的输出转成向量档,因此请寻找 Polygonize (raster to vector) 演算法,把他拖曳加到主画面中。

注解

每个框都能够以滑鼠左鑑拖曳移动到你想要的位置,使用滑鼠滚轮则可以缩放主画面的窗框尺寸。

../_images/653.png
  1. 输入图层 栏位中选择「’Filtered Grid’ 从演算法 ‘Majority Filter’」,然后按下 确定

../_images/752.png
  1. 工作流程的最后一步骤是寻找类别值然后从符合的的图征中建立新图层。找出 Extract by attribute 演算法然后拖曳到主画面。

../_images/850.png
  1. 输入图层 中选择「’Vectorized’ 从演算法 ‘Polygonize (raster to vector)」。我们预计要取出代表农地的像素,(参考 像素值列表 后可知)类别像素值是 12。选取属性 栏位输入 DN 输入 12。由于运算的输出就是我们的最终结果,这里需要为输出档命名才行,因此在 Output 栏位中输入 vectorized_class

../_images/949.png
  1. 模型名称 中输入 vectorize群组名称 则输入 raster,然后按下 储存 钮。

../_images/1048.png
  1. 模型取名为 vectorize 然后按下 存档

../_images/1182.png
  1. 现在是测试模型的时间了!打开 QGIS,选择 图层 ‣ 加入图层 ‣ 加入向量图层

../_images/1248.png
  1. 选择刚下载的 LC_hd_global_2001.tif.gz 后按下 开启旧档。影像载入后,选择 :menuselection:`地理运算 –> 工具箱

../_images/1346.png
  1. 模型 ‣ raster ‣ vectorize 目录下可以找到我们刚才建立的模型,点两下即可执行此模型。

../_images/1445.png
  1. Input 选择 LC_hd_global_2001,然后按下 Run

../_images/1543.png
  1. 你会看到所有的步骤开始自动执行,无须人工指定任何东西。处理完毕后,新的图层 vectorized_class 会加进 QGIS 中。让我们再稍微改良一下此模型吧,在 vectorize 模型上按右键,选择 编辑模型

../_images/1639.png
  1. 在步骤 12 中,我们指定了 12 当作类别值,但我们也可以设定为这个值是可以让模型使用者自由更动的初始输入值。因此,切换到 输入 分页,然后拖曳 + String 到模型中。

../_images/1736.png
  1. 参数名称 输入 Class预设值 输入 12

../_images/1836.png
  1. 现在我们要更改 Extract by attribute 演算法,让它能接受此输入值,而不是原本内定的值。点选 Extract by attribute 框旁边的 编辑 按钮。

../_images/1930.png
  1. 点选 栏位旁的下拉钮然后选择 Class,接着按下 确定

../_images/2023.png
  1. 你会看到 Extract by attribute 运算法这下就使用了 2 个输入框。在建模视窗内,有个捷径可以让你快速测试执行此模型,请点选工具列上的 执行模型 按钮。

../_images/2139.png
  1. 注意现在模型视窗内多了一个称为 Class 的栏位,请在其中输入 16,然后点选 Run

../_images/2224.png
  1. 处理完成后,我们就完成了把所有像素值为 16 的点取出成为向量档的工作了,而且这一切只需要点一下「执行」钮即可。

../_images/2321.png
  1. 现在模型已经完成,可以很简单的使用在新的影像图层上。点选 图层 ‣ 加入图层 ‣ 加入向量图层,然后选择 LC_hd_global_2012.tif.gz 档案,然后在 地理运算工具箱 面板中选择 vectorize 模型。

../_images/2420.png
  1. Input 选择 LC_hd_global_2012,然后按下 Run

../_images/2519.png
  1. 新的输出档载入后,就可以比较一下农地在 2001 和 2012 年间的改变情况了。

../_images/2617.png
  1. 为你的模型加上说明文件一向是个好主意。处理建模具有内建的 说明编辑器,可以让你直接在模型中加入一些使用提示。在 vectorize 模型上以右键点选进入 编辑模型

../_images/2717.png
  1. 按下工具列上的 编辑模型说明 钮,

../_images/2815.png
  1. 说明编辑器 视窗中,可以选取任何在 选取欲编辑的元素 栏位中出现的东西,然后在右侧的 元素描述 中打上说明文字。按下 确定 后,说明文字就可以在你执行模型时出现的 说明 分页中找到。

../_images/2913.png

模型让你只需要定义你的流程一次,但是可以执行很多次,借以省下不少时间。你甚至可以把它分享给其他使用者,模型的储存位置是在 .qgis2 目录底下,只要传送 .model 档案给其他人,然后再摆到正确的目录下,它就会出现在 地理运算工具箱 中。模型存放目录的绝对路径依作业平台而异:(记得用你的使用者名称换掉 username)

Windows

c:\Users\username\.qgis2\processing\models\

Mac

/Users/username/.qgis2/processing/models/

Linux

/home/username/.qgis2/processing/models/