ArcGIS for Desktop 基于Geoprocesing进行地理分析
基于Geoprocesing进行地理分析
- Geoprocessing即地理处理,是核心的GIS操作——从现有的或者提取出来的数据中创建新的空间数据。
- GIS中除了地图绘制、数据创建和编辑、数据库方案管理和可视化外,几乎所有的基本功能都可以规划到Geoprocessing中。
- ArcGIS 10.4中有许多Geoprocessing工具(简称GP工具),几乎包括了所有ArcGIS桌面的功能,其中包括很多分析工具。因此要进行地理分析,也可以通过Geoprocessing进行,非常方便。
Geoprocessing框架中有三种常用环境:内置工具、环境工具和脚本工具。
- 内置工具,即对话框工具能让用户更明白每一个工具以及参数的功能和意义。
- 模型工具以及脚本工具都具有对工具进行重用和组合的能力,比简单的使用对话框工具可以更有效的完成分析任务。
- 脚本是唯一可以实现批处理操作的Geoprocessing环境,也就是说,脚本可以同时处理多个输入数据。
使用Geoprocessing工具最常用的方式是通过ArcToolbox窗口调用。在ArcMap或ArcCatalog中都可以通过点击工具栏上的图标,
在ArcToolbox中,有很多工具箱、工具集和工具。工具箱是一个存放工具和工具集的容器。工具集则是一个存放工具和其它工具集的逻辑容器
要执行一个工具,直接在ArcToolbox窗口中双击此工具,就打开了工具的对话框。在对话框中,可以点击右下角的Show/Hide Help按钮来切换显示帮助。每个工具都有需要填充的参数,其中必填参数前面会带一个绿色的小圆点。填充好参数后,点击OK,工具就会执行。
如果一个数据处理或分析的过程需要调用多个工具来完成的话,一个一个的打开工具太麻烦,而且流程也不清晰,这种情况下可以考虑使用模型工具ModelBuilder,即通过创建执行模型的方式来使用Geoprocessing工具。
ModelBuilder是ArcGIS中使用Geoprocessing的一种方式,可以通过直接拖拽的方式把工具组织成完整的流程并执行,对于要使用多个工具的操作过程来说非常方便快捷,而且可以得到清晰生动的流程图,有助于理解整个操作过程。
下面以本章开头的生态区选择分析为例子,举例说明此分析在ModelBuilder中如何实现。
1. 创建工具箱以及模型
模型是放在工具箱中的。调出ArcToolbox的时候,可以看到在ArcToolbox窗口有很多系统工具箱。这些工具箱是系统提供的,里面的工具也是固定的,无法更改。如果要创建模型,就必须在自定义的工具箱中创建。因此在创建模型之前,首先要创建一个工具箱。在ArcMap右侧的Catalog窗中找到实验数据所在的文件夹(Analysis),右键点击选择New > Toolbox。
在新建的HabitatTool工具箱上右键单击,弹出菜单中选择New > Model,便新建一个模型。
在Model Properties对话框里是关于整个模型的一些设置。选择General选项卡,在Name和Label中均输入Habitat,点击确定。Name是模型的名称,如果在Geoprocessing中使用到这个模型的时候,用name来引用;而Label是模型显示在工具箱里的显示名称
然后点击工具栏上的 保存模型。一个空的模型就创建完成了,现在可以关闭ModelBuilder界面。此时在ArcToolbox窗口的Habitat工具箱下就可以看到刚才创建的Habitat模型了。
2. 从第2步开始,就是编辑模型的过程了。右键单击Catalog窗口的Habitat模型,在弹出菜单中选择Edit,打开ModelBuilder界面,开始编辑Habitat模型。
模型的组成元素主要有工具、数据、数值和连接器(Connect)。
- 数据是指地理数据,包括输入数据和输出的派生数据;
- 数值是指非地理数据,如某个常数;
- 工具是指对输入数据进行处理的操作,由黄色长方形表示;
- 连接器(Connect)是一条表示过程顺序的线条。
数据元素和工具元素由此相连,连接器的箭头指明过程的方向。另外,在ModelBuilder中,输入数据经过工具处理得到派生数据的这样一个流程,称为过程(Process)。模型可繁可简。最简单的模型可能只有一个过程,但一般模型都是由多个过程组合而成。
工具的添加可以直接从ArcToolbox窗口拖拽到ModelBuilder窗口来,地理数据的添加可以直接从ArcCatalog拖拽。另外,也可以用ModelBuilder界面工具栏中的Add Data
来添加。
首先创建选择满足第一个条件——植被类型的过程。在ArcToolbox窗口点击Analysis Tools工具箱打开,里面有4个工具集,点击打开Extract工具集,在此工具集中点击Select工具。此时的工具是没有填充颜色的,说明这个工具还不是一个可以运行的状态,往往是缺少必填参数。
点击
添加植被类型vegtype数据,添加后如下图所示。
点击 ModelBuilder 窗口里工具栏上的连接器(connector)按钮
,先在数据vegtype 上单击一下,然后在工具Select上单击一下,就在两者之间添加了连接,选择Input Feature,使得vegtype成为Select工具的输入参数。此时工具和派生数据都填充了颜色,表明工具已经是一个可以运行的状态。
Select工具是用基于要素类属性的表达式去选择输入数据中的某些要素,然后把选中的要素作为派生数据输出为一个新的要素类。所以在此工具中还需要输入选择表达式。右键点击(或双击)模型中的Select工具,在弹出菜单中选择Open,打开此工具的对话框。
可以在弹出的工具对话框中直接填写其他参数,此时可以看到Input Feature这个参数已经有值,就是刚才用连接器连接的vegtype。点击Expression参数下的SQL图标。
可以在弹出的工具对话框中直接填写其他参数,此时可以看到Input Feature这个参数已经有值,就是刚才用连接器连接的vegtype。点击Expression参数下的SQL图标。
在弹出的Query Builder对话框中设置选择表达式如下,点击OK。针对第一个条件——植被类型的过程就创建好了。
第3步创建针对第三个条件——公路影响来创建过程。用上面提到的拖拽方法添加Analysis Tools工具箱里的Buffer工具。此工具可以对输入的要素类产生制定缓冲距离的缓冲区。
用第2步中的方法添加道路数据majorrds,用连接器连接道路数据和Buffer工具。
指定输入数据后,就要确定缓冲距离,即道路影响的距离。右键单击Buffer工具,弹出菜单中选择Open打开工具对话框。在Distance参数的选项中,选择Field,即用字段值作缓冲距离,因为在道路要素类的属性中有一个Distance字段表示每条路的影响距离,所以此处使用字段值来作为缓冲距离。然后设定缓冲字段为Distance,点击OK。
设置完后模型如下图。Buffer工具的派生数据为道路影响的缓冲区。
4. 第4 步是要把第3 步的结果从第2步结果中去除,即找出满足植被条件又不在道路影响范围内的区域。可以使用Erase工具。这个工具有两个输入地理数据参数,一个是Input Features,一个是Erase features,工具的输出结果要素类为Input Features中不与Erase Features相交的部分(即相交部分被丢弃)。在这里把植被数据设定为Input Features,道路影响缓冲区数据作为Erase Features。
往模型中添加Erase工具,然后用连接器依次将vegtype_select和majorrds_Buffer和Erase工具连接。
在连接vegtype_select时,选择Input Features;在连接majorrds_Buffer时,选择Erase Features。
连接后可以右键单击Erase工具打开工具对话框,查看Input Features和Erase Features两个参数是否设置正确,如果不正确可以修改。完成后如下图。
5. 第5步是在第4步结果的基础上再添加第2个条件,即在第4步结果里找出坡度小于40度的区域。因为已经有了小于40度的区域数据,这个操作的实质就是找出小于40度的区域和和第4步结果区域中公共的部分。这里使用Intersect工具来完成这个操作。
从ArcToolbox窗口添加Intersect工具到模型,添加小于40度的区域数据slopelt40。
用连接器分别将坡度数据及第4步的输出结果与Intersect工具连接。Intersect工具有多个输入要素类,输出结果为输入要素类的公共部分。连接后模型如下图。
还需要做一步图形拆分的操作,从ArcToolbox窗口添加Multipart To Singlepart工具到模型。
6. 第6步是在第5步的基础上再增加第4个条件,即面积必须大于1089000平方英尺。
用第1步中的方法添加Select工具,添加到模型后此工具显示名称为Select(2),因为在同一个模型中已经有一个Select工具。用连接器连接第5步的结果和select(2)工具,然后右键单击select(2)工具打开工具对话框,设置最终输出要素类和选择表达式如下:
7. 运行模型。点击Model菜单下的Run Entire Model或点击工具栏中的按钮,运行模型。
模型运行过程中,各种状态会有不同的显示。例如运行完的结果显示中增加灰色阴影,当前正在运行的工具显示为红色。
全部运行完成后,找到生成的shp文件,拖拽到内容列表中,
完美重合!!!