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

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

内容说明

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

取得资料

我们要使用`Global Mosaics of the standard MODIS land cover type data product <http://www.landcover.org/data/lc/>`_ 提供的 Global Land Cover Facility 作为示例。

下载 2001 年和 2012 年的`0.5 Degree resolution GeoTIFFs <ftp://ftp.glcf.umd.edu/glcf/Global_LNDCVR/Global_HD_Rev1/GeoTIFF/>`_

为了方便起见,你也可以直接用下面的连结下载这两份资料集:

LC_hd_global_2001.tif.gz

LC_hd_global_2012.tif.gz

资料来源 [GLCF_MODIS]

操作流程

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

  • 对输入的土地覆蓋分类影像进行``Majority Filter`` 操作,此操作会删除独立的像素点,达到降噪的效果。
  • 转换输出的影像档至多边形图层。
  • 在多边形图层的属性表格中查询某个类别值,然后再为这个类别独立制作新的向量图层。

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

  1. 打开 QGIS,选择:menuselection:Processing –> Graphical Modeler...
../_images/1107.png
  1. guilabel:Processing modeler 的视窗分成左侧的工具列和右侧的主视窗。在左侧的工具列中选择 Inputs 然后拖曳:guilabel:`+ Raster layer`到主视窗中。
../_images/258.png
  1. 有个:guilabel:Parameter definition`的视窗会跳出来,在:guilabel:`Parameter name`栏输入``Input``然后在:guilabel:`Required`栏位中选择 ``Yes`,按下:guilabel:OK
../_images/334.png
  1. 主视窗中这时会出现一个叫做:guilabel:Input 的框框,它代表我们等一下要使用的土地覆蓋分类的影像资料。下一步是加上``Majority filter`` 的运算。点选左下角的:guilabel:Algorithm 以切换左侧分页,然后使用搜寻功能找到此函数,它应该会放在:guilabel:`SAGA`的 Grid - Filter 分类中。把它拖到主视窗中。

注解

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

../_images/424.png
  1. guilabel:Majority Filter 的细节设定视窗会跳出,让所有的选项保持预设,直接按下:guilabel:OK
../_images/525.png
  1. 现在主画面又多了一个:guilabel:Majority Filter`的框框,除此之外还有一条线与:guilabel:`Input 框连在一起,代表guilabel:`Majority Filter`的输入会使用:guilabel:`Input`下一个步骤是把 Majority Filter 的输出转成向量档,因此请寻找 ``Polygonize (raster to vector)``演算法,把他拖曳加到主画面中。

注解

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

../_images/623.png
  1. 在:guilabel:Input layer`栏位中选择’Filtered Grid’ 从演算法’Majority Filter’,然后按下:guilabel:`OK
../_images/722.png
  1. 工作流程的最后一步骤是寻找类别值然后从符合的的图征中建立新图层。找出``Extract by attribute`` 演算法然后拖曳到主画面。
../_images/821.png

9. Select as the 在 :guilabel:`Input Layer`中选择 ‘Vectorized’ 从演算法’Polygonize(raster to vector) . 。 我们预计要取出代表农地的像素,(参考 `Code Values <http://www.landcover.org/data/lc/>`_ 后可知)类别像素值是 12。 guilabel:Selection attribute`栏位输入``DN` the value 输入``12`` as 。 由于运算的输出就是我们的最终结果,这里需要为输出档命名才行,因此在 Output 栏位中输入 vectorized class

../_images/919.png
  1. Model name 中输入 vectorize , guilabel:Group name 则输入 raster ,然后按下 Save 钮。
../_images/1020.png
  1. 模型取名为 vectorize 然后按下 Save
../_images/1124.png
  1. 现在是测试模型的时间了!打开 QGIS,选择 Layer ‣ Add Layer ‣ Add Raster Layer...
../_images/1221.png
  1. 选择刚下载的 LC_hd_global_2001.tif.gz 后按下 Open ,影像载入后,选择 Processing ‣ Toolbox
../_images/1319.png
  1. Models ‣ raster ‣ vectorize 目录下可以找到我们刚才建立的模型,点两下即可执行此模型。
../_images/1418.png

15. guilabel:Input`选择``LC_hd_global_2001`,然后按下 Run.

../_images/1517.png

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

../_images/1616.png

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

../_images/1715.png
  1. guilabel:Parameter Name 输入``Class``,guilabel:Default value`输入 ``12`
../_images/1815.png
  1. 现在我们要更改``Extract by attribute`` 演算法,让它能接受此输入值,而不是原本内定的值。点选:guilabel:Extract by attribute`框旁边的:guilabel:`Edit 按钮。
../_images/1913.png

20. 点选 Value 栏位旁的下拉钮然后选择 Class,接着按下 OK

../_images/2010.png
  1. 你会看到:guilabel:Extract by attribute 运算法这下就使用了 2 个输入框。在建模视窗内,有个捷径可以让你快速测试执行此模型,请点选工具列上的 :guilabel:`Run`按钮。
../_images/2115.png
  1. 注意现在模型视窗内多了一个称为:guilabel:Class`的栏位,请在其中输入``16` 然后点选:guilabel:Run
../_images/2214.png
  1. 处理完成后,我们就完成了把所有像素值为 16 的点取出成为向量档的工作了,而且这一切只需要点一下「执行」钮即可。
../_images/2311.png

24. 现在模型已经完成,可以很简单的使用在新的影像图层上。点选:menuselection:Layer –> Add Layer –> Add Raster Layer..., 然后选择``LC_hd_global_2012.tif.gz`` 档案,然后在:guilabel:Processing Toolbox`面板中选择:guilabel:`vectorize`

../_images/2410.png
  1. guilabel:Input`选择``LC_hd_global_2012`,然后按下:guilabel:Run
../_images/259.png
  1. 新的输出档载入后,就可以比较一下农地在 2001 和 2012 年间的改变情况了。
../_images/267.png
  1. 为你的模型加上说明文件一向是个好主意。处理建模具有内建的:guilabel:Help editor ,可以让你直接在模型中加入一些使用提示。在``vectorize`` 模型上以右键点选进入:guilabel:Edit model
../_images/277.png
  1. 按下工具列上的 :guilabel:`Edit model help`钮。
../_images/285.png

29. 在:guilabel:Help editor 视窗中, 可以选取任何在 Select element to edit 栏位中出现的东西, 然后在右侧的 Element description 中打上说明文字。按下 OK 后,说明文字就可以在你执行模型时出现的 Help 分页中找到。

../_images/294.png

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

Windows

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

Mac

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

Linux

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