目录

上一主题

10.5. 使用处理框架进行批次处理

下一主题

10.7. QGIS创建和利用高程面模型


本教程由OSGeo中国中心维护。

10.6. 利用图形建模自动执行复杂的工作流程

GIS 操作通常包含许多步骤,上一步骤的输出会被拿来当作下一步骤的输入。 如果你想改变输入资料或调整操作中的参数,可能就需要手动把整套操作重新跑一遍。 幸运的是,QGIS 有内建的图形建模,可以用来定义操作中的各步骤,然后以非常简单的方式执行。 你也可以使用它来进行批次处理,把很多的输入档一次完成。 本节示范如何制作建模,从“土地利用分类”的影像档中取出特定的分类区域。 可以在一下链接进行下载数据 http://www.qgistutorials.com/downloads/LC_hd_global_2001.tif.gz

http://www.qgistutorials.com/downloads/LC_hd_global_2012.tif.gz

10.6.1. 操作流程

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

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

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

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

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

  1. 首先打开QGIS,选择 Processing ‣ Graphical Modeler... ,如 图 10.77

_images/1_xgn.png

图 10.77 选择Graphical Modeler

2. 在 Processing modeler 的视窗分成左侧的工具列和右侧的主视窗。在左侧的工具列中 选择 Inputs 然后拖曳 + Raster layer 到主视窗中,如 图 10.78

_images/2_x3d.png

图 10.78 添加Raster layer

3. 有个 Parameter definition 的视窗会跳出来,在 Parameter name 栏输入 "Input" 然后 在勾选 Mandatory ,按下 OK ,如 图 10.79

_images/3_xl2.png

图 10.79 Parameter definition视窗

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

备注

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

_images/4_xk1.png

图 10.80 搜索majority

5. 在 Majority Filter 的细节设定视窗会跳出,让所有的选项保持预设,直接按下 OK , 如 图 10.81

_images/5_xfq.png

图 10.81 Majority Filter设置

6. 现在主画面又多了一个 Majority Filter 的框,除此之外还有一条线与 Input 框连在一起, 代表 Majority Filter 的输入会使用 Input ,下一个步骤是把 Majority Filter 的输出转成矢量文件, 因此请寻找 "Polygonize (raster to vector)" 演算法,把他拖曳加到主画面中,如 图 10.82

备注

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

_images/6_xar.png

图 10.82 界面显示

7. 在 Input layer 栏位中选择"Filtered Grid"从演算法"Majority Filter",在"Band number"选项中输入一下数字即可, 然后按下 OK ,如 图 10.83

_images/7_xfk.png

图 10.83 Polygonize设置

8. 工作流程的最后一步骤是寻找类别值然后从符合的要素中建立新图层。找出 "Extract by attribute" 演算法然后拖拽到主画面, 如 图 10.84

_images/8_xwm.png

图 10.84 添加Extract by attribute

9. 在 Input Layer 中从算法"Vectorized"中选择 Polygonize(raster to vector) 。 我们预计要取出代表农地的像素,我们已知道像素值是 12。在 Selection attribute 栏位输入"DN" , 在 value 输入 "12" 。由于运算的输出就是我们的最终结果,这里需要为输出文件命名才行, 因此在 Extacted(attribute) 栏位中输入"vectorized class",如 图 10.85

_images/9_x9i.png

图 10.85 Extract by attribute设置

10. 在 Name 中输入"vectorize", 在 Group 则输入 "raster",然后按下 Save 钮, 如 图 10.86

_images/10_xl4.png

图 10.86 Model properties设置

  1. 模型取名为"vectorize"然后按下 Save ,如 图 10.87

_images/11_xu4.png

图 10.87 保存

12. 现在测试模型,打开 QGIS,选择 Layer ‣ Add Layer ‣ Add Raster Layer... , 如 图 10.88

_images/12_xue.png

图 10.88 添加测试模型

13. 选择刚下载的"LC_hd_global_2001.tif.gz"后按下 Open ,影像载入后, 选择 Processing ‣ Toolbox ,如 图 10.89

_images/13_xlq.png

图 10.89 选择Toolbox

14. 在 Models ‣ raster ‣ vectorize 目录下可以找到我们刚才建立的模型,点两下即可执行此模型, 如 图 10.90

_images/14_x65.png

图 10.90 搜索vectorize

15. 在 Input 选择"LC_hd_global_2001", 在"Class"中填写"12",然后按下 Run , 如 图 10.91

_images/15_xw4.png

图 10.91 vectorize设置

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

_images/16_xro.png

图 10.92 右键vectorize模型

17. 在步骤 15 中,我们指定了"12"当作类别值,这个值可以由模型使用者更改。 因此,切换到 Inputs 分页,然后拖曳 + String 到模型中,如 图 10.93

_images/17_xym.png

图 10.93 添加String

  1. Parameter Name 输入 "Class" ,Default value 输入"12",如 图 10.94

_images/18_x3n.png

图 10.94 Parameter Definition设置

19. 现在我们要更改 "Extract by attribute" 演算法,让它能接受此输入值,而不是原本内定的值。 点选:guilabel:Extract by attribute 框旁边的:guilabel:Edit 按钮,如 图 10.95

_images/19_xqj.png

图 10.95 更改算法

20. 点选 Value 栏位前的下拉钮然后选择 "Model Input" ,后面的下拉钮选 "Class" ,接着按下 OK , 如 图 10.96

_images/20_x5l.png

图 10.96 选择Model Input

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

_images/21_xij.png

图 10.97 运行

22. 注意现在模型视窗内多了一个 Class 的栏位,请在其中输入"16"然后点选 Run , 如 图 10.98

_images/22_x2r.png

图 10.98 vectorize设置

23. 处理完成后,我们就完成了把所有像素值为 16 的点取出成为矢量文件的工作了,而且这一切只需要点一下 Run 钮即可, 如 图 10.99

_images/23_xdy.png

图 10.99 处理后结果

24. 现在模型已经完成,可以很简单的使用在新的影像图层上。点选 Layer ‣ Add Layer ‣ Add Raster Layer... , 然后选择"LC_hd_global_2012.tif.gz" 文件,然后在 Processing Toolbox 面板中选择 vectorize , 如 图 10.100

_images/24_xkw.png

图 10.100 加载影像

  1. Input 选择"LC_hd_global_2012",然后按下 Run ,如 图 10.101

_images/25_xcq.png

图 10.101 vectorize设置

  1. 新的输出档载入后,就可以比较一下农地在 2001 和 2012 年间的改变情况了,如 图 10.102

_images/26_xl2.png

图 10.102 2001和2012对比

27. 为你的模型加上说明文件一向是个好主意。处理建模具有内建的 Help editor ,可以让你直接在模型中加入一些 使用提示。在"vectorize"模型上以右键点选进入 Edit model ,如 图 10.103

_images/27_xdk.png

图 10.103 进入Edit model

  1. 按下工具列上的 Edit model help 钮,如 图 10.104

_images/28_xav.png

图 10.104 点击Edit model help

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

_images/29_xfi.png

图 10.105 查看Edit model help

模型只需要定义一次,但可以反复执行,从而节省时间提高工作效率。