3.1 简介
本章介绍 ArcGIS Pro 中的地理处理框架,包括工具、模型和脚本的使用。了解地理处理框架有助于编写有效的 Python 脚本。Python 和 ModelBuilder 经常一起使用,因此建议对 ModelBuilder 有充分的了解,以充分利用 Python 脚本。
3.2 什么是地理处理?
ArcGIS Pro 中的地理处理允许您执行空间分析和建模以及自动执行 GIS 任务。典型的地理处理工具会获取输入数据(要素类、栅格或表),执行地理处理任务,并生成输出数据。ArcGIS Pro 包含一千多个地理处理工具。地理处理工具的示例包括用于创建缓冲区、向表添加字段以及对地址表进行地理编码的工具。
地理处理通过创建组合一系列工具的序列来支持工作流的自动化。一个工具的输出实际上成为下一个工具的输入。使用模型和脚本,可以在 ArcGIS Pro 中通过组合地理处理工具来创建这些自动化工作流。
ArcGIS Pro 中的地理处理框架由一组用于组织和运行工具的窗口和对话框组成。此框架可让您轻松创建、运行、管理、记录和共享地理处理工作流。地理处理包括一组对数据进行操作的工具。基本地理处理框架包括以下内容:
- 工具集合,组织在工具箱和工具集中
- 查找和运行工具的方法
- 环境设置和其他控制工具运行方式的地理处理选项
- 用于指定工具参数和控制工具执行的工具对话框
- ModelBuilder,一种用于创建允许对工具进行排序的模型的可视化编程语言
- 使用 Python 运行工具的 Python 窗口
- 记录正在执行的工具的地理处理历史记录
- 创建 Python 脚本并将其用作工具的方法
以下部分将更详细地介绍这些组件。此地理处理框架的一些特性使得以一致而灵活的方式使用工具成为可能。这些特性包括:
- 所有工具都可以通过其工具箱访问,这使得访问工具、模型和脚本的过程保持一致。
- 所有工具都以类似的方式记录,从而允许进行一致的分类和搜索。
- 所有工具都具有类似的用户界面(工具对话框)来指定工具参数。
3.3 使用工具箱和工具
地理处理工具对数据集执行操作。您拥有哪些工具可用部分取决于您拥有的许可级别:基本、标准或高级。但是,几乎所有典型工具都是基本许可的一部分。工具的可用性还取决于您是否拥有扩展许可,例如 ArcGIS 3D Analyst™、ArcGIS Network Analyst™ 和 ArcGIS Spatial Analyst™。但是,无论许可级别或扩展如何,工具的组织都保持不变。
通常使用地理处理窗格访问地理处理工具。要从 ArcGIS Pro 中打开此窗格,请单击“分析”选项卡,然后单击“工具”。
使用地理处理窗格定位工具有多种方式:
- 您可以按名称搜索工具。
- 可以将工具添加到收藏夹列表中 — 已存在包含常用工具的默认列表。
- 最近运行的工具将显示在收藏夹下方。
- 您可以浏览工具箱以查找特定工具。
- 通过 Portal for ArcGIS 提供的工具单独列出。
地理处理工具被组织到工具箱中 — 例如,分析工具、制图工具和地理编码工具等。
每个工具箱通常包含一个或多个工具集,每个工具集又包含一个或多个工具。
考虑到可用工具的数量,如果您不知道从哪里查找,浏览可能会很麻烦。
您可以通过多种方式找到所需的工具。首先,一些最常用的工具可以直接从 ArcGIS Pro 中的“分析”选项卡访问。但是,分析库下仅列出了少数工具。
虽然此处的工具数量有限,但您可以自定义分析库以显示您经常使用的工具。
其次,您可以搜索工具。地理处理窗格顶部包含一个搜索栏。在此处输入搜索词以查看可用的工具。搜索将返回具有该工具的确切名称的工具,以及描述中出现该词或提供类似功能的其他工具。
搜索术语“缓冲区”将返回“缓冲区”、“3D 缓冲区”、“图形缓冲区”等工具,以及“按位置选择图层”等工具(其中包括距离选项)。您还可以输入更多概念性术语来描述分析的性质,而不是实际的工具名称。例如,“邻近度”、“叠加”、“摘要”或“回归”等术语将建议在这些一般类型的分析中可能感兴趣的工具。
滚动搜索结果并双击感兴趣的工具以调出工具对话框。
3.4 工具的类型和类别
ArcGIS Pro 包含几种类型的工具,每种工具都由不同的符号指定。
内置工具:这些工具是使用 ArcObjects 和编译的编程语言(如 C++)构建的。Esri 在创作其软件时创建了这些工具,ArcGIS Pro 中的大多数工具都是内置工具。
脚本工具:这些工具由 Python 脚本组成,可通过工具对话框访问。执行工具时,将运行脚本来执行地理处理操作。
模型工具:这些工具是使用 ModelBuilder 创建的。
尽管这些类型的工具是使用不同的方法创建的,但所有工具的工具对话框看起来都一样,这是 ArcGIS Pro 中地理处理框架的优势之一。
还有两类工具:
- 系统工具:这些工具由 Esri 创建并作为常规 ArcGIS Pro 软件的一部分安装。具体哪些系统工具可用取决于产品许可级别和扩展数量。大多数系统工具都是内置工具,但 Esri 也编写了几个脚本工具。
- 自定义工具:这些工具通常由脚本和模型工具组成。自定义工具可以由用户创建,也可以从第三方获取并添加到 ArcGIS Pro。
使用地理处理工具时,您可能不会注意到哪些工具是系统工具,哪些是自定义工具,因为它们的设计工作方式相同。创建自定义工具后,可以将其添加到地理处理工作流中,方式与任何系统工具相同。
3.5 使用工具对话框运行工具
找到工具后,单击即可打开该工具,这将打开工具对话框。每个工具都有一些参数,在运行工具之前必须指定这些参数。工具参数是文本字符串、数字或其他输入。工具对话框提供了一个易于使用的界面来指定这些参数。工具对话框允许浏览和选择数据集、从列表中选择选项以及输入值。
大多数工具都需要一个或多个输入数据集。其他常见参数是预设的文本字符串,称为关键字。虽然每个工具都有一个或多个参数,但并非所有参数都是必需的。可选参数具有由工具设置的默认值。您只需不更改参数或不指定值即可接受默认值。关键字的默认值通常在首次打开工具对话框时显示。图中显示了 Clip 工具的工具对话框示例。
您可以通过几种方式获取工具帮助。将鼠标悬停在右上角的蓝色问号上会弹出一个窗口,其中显示了该工具的简要概述。如果您不熟悉该工具,此描述有助于确保您拥有正确的工具。
单击蓝色问号符号会使用您的默认浏览器打开该工具的在线帮助页面。该帮助提供了该工具的更完整描述,包括工具参数的详细说明。
您将在后面的章节中查看更详细的帮助页面,其中有如何在 Python 脚本中使用工具的示例。
在工具对话框中,您还可以通过将鼠标悬停在参数名称左侧的蓝色信息符号上来获取有关每个参数的帮助。
工具对话框包含运行工具时必须指定的参数。请注意,裁剪工具总共有三个参数。标有小红色星号的参数是必需的,需要赋值。某些工具还具有可选参数,如没有星号符号所示。您无需为工具运行的可选参数指定值。将使用默认值。
工具对话框有几种确保输入正确的机制。例如,您可以单击下拉箭头从当前地图中的要素图层列表中进行选择,而不是输入路径和文件名。只有当地图中有可接受的要素图层可供选择时,才会显示下拉箭头。
您还可以使用“浏览”按钮浏览磁盘上的数据。这些选项不仅可以防止输入错误,还可以检查数据输入是否有效。例如,Union 工具输入要素必须由多边形要素类组成,因此选择和浏览选项仅显示多边形要素类。
您还可以通过从“内容”窗格或“目录”窗格拖动要素图层来指定参数。
考虑一个已完成参数的示例对话框。输入要素由一个名为 roads 的要素类组成,该要素类由一个名为 floodzones 的要素类裁剪。输出要素类是名为 roads_clip 的要素类。
**注意:**不显示要素类的完整路径。单击参数内部时,如果从磁盘中选择了数据集,则显示完整路径。使用当前地图中的图层时,仅显示要素图层的名称。当将参数指定为当前地图中的要素图层时,不会显示文件扩展名(例如 .shp),只有当将其指定为磁盘上的要素类时才会显示。
单击“运行”时,剪辑工具将运行。底部会出现一个进度条,显示正在执行的工具。完成后,会出现一条确认消息,其中有一个复选标记和两个链接:查看详细信息和打开历史记录。
查看详细信息链接会显示工具执行的摘要,包括参数和地理处理消息。此摘要对于警告或错误特别有用。
历史记录窗格显示在当前会话中运行的所有地理处理工具的完整列表。
将鼠标悬停在历史记录中的条目上或单击该条目,将显示与查看详细信息链接相同的单个工具信息。双击条目将打开工具对话框,其中已填充参数。查看地理处理历史记录有多种用途。首先,您可以查看用于运行工具的参数。运行许多工具后,很容易忘记使用的所有参数。其次,您可以直接从历史记录中再次运行同一工具。工具对话框将填充与以前相同的参数,您可以使用这些相同的参数或修改它们。最后,您可以查看任何警告或错误消息。地理处理历史记录将作为项目的一部分保存,以便您将来可以返回它。
当工具运行完毕时,生成的要素类默认作为要素图层添加到当前地图的内容中。但是,并非所有工具都会创建可添加到地图的输出。例如,获取计数工具只有一个输入参数,即要素类或表。
输出是输入要素类或表中行数的计数。
在这种情况下,查看工具运行结果的唯一方法是检查工具执行摘要。
花点时间再次查看工具对话框中的工具参数。如果指定了错误的参数,则会出现错误符号。
将鼠标悬停在符号上会显示简短描述,而单击符号则会显示更详细的错误消息。在这种情况下,剪辑特征不存在。
有时会出现警告符号,表示运行该工具可能会导致不良结果。
警告消息不会阻止工具运行,但您可能希望在运行工具之前查看警告。在这种情况下,输出数据集已存在,如果执行工具,则将被覆盖。
此消息很常见。执行工具后,工具对话框将保持打开状态,并且工具参数将继续使用相同的值进行填充。由于工具创建了输出要素,因此要素类已经存在。
**注意:**覆盖地理处理结果是地理处理选项下的一个选项。默认为打开,这意味着尝试覆盖现有数据集将导致警告,但工具将运行并覆盖现有数据集。关闭此选项时,将提供错误消息,并且工具将不会运行。
3.6 指定环境设置
地理处理操作受环境设置的影响。这些设置作为影响工具运行方式的附加参数。您可以从分析选项卡查看环境。环境对话框允许您查看和设置所有地理处理操作的环境。
有许多设置可用,但其中最重要的一个是当前工作空间。大多数地理处理工具使用数据集作为输入,然后输出新数据集。工作空间由这些数据集所在的路径组成。数据集的完整路径和文件名可能很长 - 例如,C:\Data\project_A12\water\final.gdb\roads。设置工作空间后,您只需在工具对话框中指定基本名称。在前面的示例中,您将工作空间设置为 C:\Data\project_A12\water\final.gdb,然后在指定工具参数时仅输入基本名称“roads”。此快捷方式无需每次都输入这些冗长的路径(并可能导致拼写错误)。设置当前工作空间后,它是浏览磁盘上的文件时的默认位置。
图中显示了当前工作空间的示例。
设置工作空间后,您可以通过仅输入要素类的基本名称来指定此工作空间内的要素类。输入基本名称后,再次将鼠标悬停在参数内,就会出现完整路径。
当前工作空间适用于输入和输出数据集。有效工作空间包括文件夹(用于独立数据集,如 Shapefile)、地理数据库和地理数据库要素数据集。默认工作空间是项目的默认地理数据库。
工作空间有两种类型:(1) 当前工作空间,默认情况下指定输入的来源和输出的放置位置;(2) 临时工作空间,主要用于模型和脚本工具写入中间数据。
还有针对特定数据类型(如地理数据库、栅格或 TIN [不规则三角网])和特定类型函数(如地理统计分析)的设置。通常,您只需为工作流设置其中几个环境,因为其中许多环境不适用于您正在使用的数据和工具。
环境始终在起作用。换句话说,即使您不指定它们,它们也有在运行工具时使用的默认值。例如,默认输出坐标系与输入相同。因此,当您运行工具时,坐标系不会改变,除非您在“环境”对话框中另行指定。
可以在多个级别指定环境,并且特定层次结构会命令此过程:
- 第一级是应用程序。在“分析”选项卡上,单击“环境”以打开“环境”对话框。此处创建的任何设置都将传递给应用程序调用的地理处理工具。
- 第二级是单个工具。每个工具对话框都有一个“环境”选项卡。单击此选项卡时,仅显示与工具相关的环境。此处创建的任何设置仅适用于工具的当前运行,这些设置会暂时覆盖应用程序从“环境”对话框传递的设置。这些设置不会保存到工具中,而仅适用于工具的单次执行。
- 第三级是模型。环境可以作为模型属性的一部分创建。在模型中创建的任何设置都会覆盖应用程序设置传递的设置。模型环境保存为模型的一部分。
- 第四级也是最后一级是脚本。环境设置可以编码到 Python 脚本中,这些设置会覆盖应用程序或工具对话框传递的设置。这些设置作为脚本文件中 Python 代码的一部分保存。
一般来说,环境会在这个分层系统中向下传递,但您可以在每个级别覆盖这些设置。实际上,您通常会在应用程序级别设置一些环境设置,并且只有在有特定原因时才使用较低级别。例如,当您需要一个工具的输出坐标系与其余分析不同时,您可以在该工具级别设置环境。
Python 脚本工具和 Python 工具箱在 ArcGIS Pro 应用程序中运行,因此,应用程序中的环境设置会传递给这些工具。但是,独立于 ArcGIS Pro 运行的独立 Python 脚本无法识别应用程序的环境设置。因此,独立脚本可能需要代码来专门处理相关的环境设置。
3.7 使用批处理和动态命名
大多数工具使用有限数量的输入数据集。例如,裁剪工具仅使用单个输入要素类,并使用单个裁剪要素类对其进行裁剪。如果您想在许多输入数据集上使用类似的设置运行同一工具,该怎么办?这就是批处理的作用所在。在 ArcGIS Pro 中的地理处理环境中,批处理意味着使用不同的参数多次运行单个工具而无需进一步干预。
大多数地理处理工具都可以在批处理模式下运行。批处理的逻辑是,只需对参数进行轻微修改,即可多次运行同一工具。每次运行称为迭代。如果有多个输入要素类,每个都需要处理,则批处理工具会迭代所有输入要素类并对每个输入要素类执行相同的任务。
要调出地理处理工具的批处理版本,请在地理处理窗格的工具列表中右键单击某个工具,然后单击批处理。
工具名称将被批处理版本替换 - 例如,剪辑工具的名称将被替换为批量剪辑。
对于具有多个输入参数的工具,您必须选择要使用哪个参数作为批处理参数。您只能选择一个。例如,对于裁剪工具,您可以使用多个输入要素类来裁剪同一个裁剪要素类,也可以使用一个输入要素类来裁剪多个裁剪要素类,但不能同时进行。
您可以制作一个临时的批处理工具,也可以将批处理工具保存到工具箱中。如果您预计要多次执行相同类型的批处理,后者将是一个不错的选择。
在对话框的下一个面板中,输入工具参数。批处理工具对话框看起来与同一工具的常规版本非常相似,但所选的批处理参数现在有多个条目。该图显示了已完成的批处理工具对话框的示例。
批量输入一次输入一个。每次输入一个值时,都会创建一个新的空行以输入下一个值。对于其他参数,您只需提供一个值,这与常规工具中相同。在这种情况下,输出需要一些特殊考虑。批量裁剪工具为每个输入要素类创建一个输出要素类。为了避免为每个输出输入唯一的名称,使用了一种称为动态命名的特殊命名技术。此技术在输出要素类的名称中使用变量 %Name%。此技术意味着名称的第一部分是从输入要素类中获得的,然后是名称的其余部分 - 在此示例中为 _clip。在此示例中,输入要素类称为 parks、rivers 和 dirts,相应的输出要素类称为 parks_clip、rivers_clip 和 dirts_clip。如果不使用 %Name% 变量,则该工具会在每次迭代时创建相同的输出要素类,从而有效地覆盖以前的结果。
使用 %Name% 进行动态命名依赖于一种称为行内变量替换的技术。实际上,变量的值被另一个值替换。此技术用于 ModelBuilder 中,并在此处应用于批处理工具。
动态命名不仅适用于要素类或栅格数据集的名称。您还可以指定输出的其他元素,包括工作空间、目录路径和文件扩展名。%Workspace Name% 变量允许您指定工作空间或文件夹名称。这意味着,例如,每个输出都可以保存到其自己的文件夹中。%Path% 变量允许您指定目录位置 - 即路径的任何部分,而不是数据集的名称。%Extension% 变量可以指定不同的文件扩展名。
**注意:**变量 %Name% 不必位于要素类名称的开头。例如,输出要素类可以称为 output_%Name%。
并非所有批处理工具都需要动态命名。例如,请考虑添加字段工具。以批处理模式运行此工具可让您将相同的新字段添加到多个输入要素类。由于此工具会更新每个输入要素类,因此无需命名输出文件。
以批处理模式运行工具对于设置许多地理处理任务非常有用。尽管填写批处理工具需要一些努力,但一旦填写了批处理参数值,该工具就会以批处理模式多次运行,而无需额外的用户输入。但是,以批处理模式运行工具并不会减少工具运行所需的时间。例如,使用 20 个输入要素类以批处理模式运行裁剪工具所需的时间与使用相同参数运行独立裁剪工具 20 次所需的时间相同。节省时间的原因是设置速度更快,而不是工具执行速度更快。
并非所有地理处理工具都提供批处理模式。最值得注意的是,某些工具已经可以处理多个输入数据集,例如 Intersect 和 Union。对于这些工具,批处理选项会变暗。
某些工具允许您处理多个输入,但它们仍可以以批处理模式运行。请考虑栅格域中的单元格统计工具。该工具允许您输入多个栅格并基于每个单元格计算特定的叠加统计。
在批处理模式下,输入栅格不能用作批处理参数,但可以使用叠加统计数据。批处理模式允许您为多个输入栅格确定多个统计数据。
此处使用动态命名来捕获叠加统计的名称。在示例中,工具执行后,输出栅格被称为“statistics_MEAN”、“statistics_MAXIMUM”和“statistics_MINIMUM”。
回想一下,在设置以批处理模式运行的工具时,您可以选择创建临时批处理工具或将批处理工具保存到工具箱。保存批处理工具可以重复使用同一工具。它还可以让我们更仔细地了解批处理工具的工作原理。考虑前面使用批处理剪辑工具处理三个输入要素类的示例。批处理工具保存到自定义工具箱文件中。
工具执行后,工具将作为模型工具添加到工具箱中。事实上,所有批处理工具都是作为模型创建的,无论它们是作为临时工具创建还是保存到工具箱。后一种选择使工具执行后更容易找到模型工具,并且可以在其他项目中使用。
双击模型工具会调出带有所选批处理参数的批量剪辑工具,但不会保留参数值。
批处理地理处理使某些任务的自动化变得更加容易,但也存在局限性。首先,只能使用一个工具参数作为批处理参数。其次,批处理参数的值必须逐个输入。因此,批处理对于处理相对较少的数据集很有用,但对于大量数据集来说,它不是一个现实的选择。另一方面,Python 脚本没有这样的限制。
除了以批处理模式运行常规地理处理工具外,还有少数特定的批处理系统工具可用。例如,数据管理工具箱包含投影工具,该工具创建一个具有与输入要素类不同的坐标系的新要素类。投影工具仅使用单个输入要素类。另一方面,批处理投影工具是此工具的批处理版本,允许多个输入要素类。可以通过以批处理模式运行投影工具来实现相同的目的,但参数控制略有不同。
其他批处理系统工具包括批量导入数据、批量更新字段、批量构建金字塔和批量计算统计数据。大多数批处理系统工具都是以脚本工具的形式编写的。
3.8 使用模型和 ModelBuilder
执行单个工具是完成某些 GIS 任务的实用方法。然而,在典型的 GIS 工作流中,您通常需要运行一系列工具才能获得所需的结果。您可以简单地通过一次运行一个工具来运行整个序列,但这个过程有局限性,特别是当您的工作流很长且重复时。ModelBuilder 是创建此工具序列的一种方法,其中一个工具的输出成为另一个工具的输入。ModelBuilder 就像一种可视化编程语言 - 它不是使用基于文本的指令,而是使用可视化流程图来对地理处理任务进行排序。在这种情况下,模型是一系列地理处理任务的可视化表示。在 ArcGIS Pro 中,模型是工具,一旦创建,它们就可以像任何其他工具一样工作。
您可以在模型中使用任何系统或自定义工具,并且对单个模型中使用的工具数量没有限制。模型还可以包含其他模型(因为模型是工具),并且您可以使用迭代循环和条件来控制模型的流程。
在了解如何创建和运行模型之前,请先熟悉模型的基本元素。元素是模型的构建块。元素包括工具、数据变量、值变量和连接器。
地理处理工具是模型的基本构建块。工具对地理数据执行地理处理操作。数据变量引用磁盘上的数据(或地图中的图层)。数据变量可以是输入或输出。值变量是字符串、数字、布尔值(True 或 False)、空间参考、线性单位和范围等项目。简而言之,值变量包含除磁盘数据引用之外的任何内容。变量可以用作工具的输入和输出。派生数据或一个工具的输出将成为另一个工具的输入。
数据和值通过连接器连接到工具。连接器箭头显示地理处理任务的方向。连接器有四种类型:(1) 数据连接器,将数据和值变量连接到工具;(2) 环境连接器,将包含环境设置的变量连接到工具;(3) 前提条件连接器,将变量连接到工具;(4) 反馈连接器,将工具的输出连接回同一工具或前一个工具作为输入。
连接器创建模型流程。模型流程至少包含一个工具和连接到该工具的变量。连接器箭头指定处理顺序。典型模型包含多个连接流程。复杂模型可以包含数百个流程。
在 ModelBuilder 中创建模型和运行工具包括几个步骤:
- 创建模型。
- 向模型添加数据和工具。
- 创建连接器并填写工具参数。
- 保存模型。
- 运行模型。
- 检查模型结果。
更详细地解释了每个步骤,包括以下示例。
- 创建模型:创建模型的主要方法有两种:(1) 在 ArcGIS Pro 中的“分析”选项卡上,您可以单击“ModelBuilder”按钮;或者 (2) 您可以右键单击“目录”窗格中的工具箱,然后单击“新建”>“模型”,这将在 ModelBuilder 中打开一个新的空白模型。
- 向模型添加数据和工具: 您可以通过将内容窗格中的图层或目录窗格中的磁盘数据集拖到模型窗口中来向模型添加数据。您可以使用 ModelBuilder 选项卡上的工具下拉箭头并按名称搜索工具来向模型添加工具。您还可以通过从地理处理窗格中拖动工具来添加工具。在图中的模型中,名为 roads 的要素类已作为数据元素添加,Buffer 工具已作为工具添加。由于 Buffer 工具的输出是新要素类,因此会自动将其添加为派生数据元素。
- **创建连接器并填写工具参数:**当您最初将工具和数据拖到模型时,由于尚未指定所需的参数值,因此流程尚未准备好运行。当流程的任何部分在模型中显示为灰色时,表示参数仍然缺失。可以通过打开每个工具的工具对话框然后像指定任何工具一样指定工具参数来指定参数。设置参数会在数据集和工具之间创建连接箭头或连接器。设置流程所需的所有参数后,模型流程元素将变为特定颜色以显示它们已准备好运行。
- 保存模型:您可以通过单击“模型构建器”选项卡上的“保存”来保存模型。单击“属性”可更改模型的名称及其标签。
- 运行模型:指定所有参数后,模型即可运行。您可以通过单击“模型构建器”选项卡上的“运行”来运行整个模型。您还可以通过右键单击工具并单击“运行”来单独运行单个过程。模型进度对话框指示运行模型中包含的工具的进度。模型运行完成后,模型元素(数据输入除外)将出现阴影,以指示工具已运行且输出数据集已创建。
- **检查模型结果:**默认情况下,模型创建的输出数据集被视为中间数据,这意味着它们会保存到磁盘但不会自动添加到地图中。要检查模型结果,您可以右键单击包含输出数据集的模型元素,然后单击“添加到显示”,这会将数据集添加到当前地图,以便您检查结果。
可以使用相同的步骤将其他工具和数据添加到模型中。在图中的示例模型中,道路层被缓冲,然后与名为洪水区的层相交。然后使用盆地层裁剪相交结果。
ModelBuilder 中的模型是一系列地理处理工具的可视化流程图。ModelBuilder 界面提供了一种直观的方式来创建此序列。关键在于模型是工具箱中的工具,这使得可以保存模型以备将来使用并共享。迄今为止开发的模型相对简单。但是,单个模型中可以使用的数据集和工具数量没有限制。复杂的模型可以包含许多地理处理任务。
使用模型创建地理处理工作流的优势包括:
- ModelBuilder 提供了一个直观的界面来创建工作流。
- 模型提供了一种记录工作流的有效机制。
- 模型可以组织在工具箱中并共享。
由于模型是工具箱中的工具,因此可以安排在特定时间运行。当您在工具对话框中单击“运行”时,默认情况下,该工具会立即运行。您还可以单击“运行”按钮右侧的下拉箭头来安排何时执行该工具。
计划包括以特定频率运行工具的选项 - 例如,每天同一时间运行。历史记录窗格列出了计划运行的所有工具。这些计划选项适用于任何地理处理工具,而不仅仅是模型工具。您还可以通过编写导入包含模型的工具箱的 Python 脚本来计划模型,然后计划脚本在特定时间运行以将模型作为脚本的一部分运行。
ModelBuilder 有很多东西需要学习,这超出了本书的范围。 ArcGIS Pro 帮助页面提供了有关 ModelBuilder 的大量文档。
可以通过单击 ModelBuilder 选项卡上的导出将模型导出到 Python 脚本。模型可以导出到 Python 文件 (.py),也可以发送到 Python 窗口。将模型导出到 Python 代码有助于了解如何在 Python 中使用工具和环境,但存在局限性,因为并非 ModelBuilder 中的所有功能都可以完美转换为 Python。例如,某些模型工具和内联变量替换必须替换为等效的 Python 功能。由于这些功能差异,无法将 Python 代码导出到模型。
3.9 使用脚本
正如 ModelBuilder 可用于创建运行一系列工具的模型一样,脚本语言可用于创建和运行此序列。脚本语言相对容易学习,ArcGIS Pro 中使用的脚本语言是 Python。
脚本类似于模型:ModelBuilder 用于创建模型,Python 用于创建脚本。ModelBuilder 是一种可视化编程语言,Python 是一种基于文本的编程语言。正如模型是 ArcGIS Pro 中的工具一样,脚本也可以是工具。创建脚本后,它可以成为您可以单独运行或在模型或其他脚本中使用的工具。脚本也可以作为独立脚本运行,在 ArcGIS Pro 之外。在这种情况下,它们不是地理处理工具,但根据需要将脚本作为脚本工具添加到工具箱相对容易。
如果模型和脚本如此相似,为什么要使用脚本而不是模型? ModelBuilder 是一种直观的工具创建方式,对于 ArcGIS Pro 新手来说相对容易学习。它不需要编程经验,而且几乎不需要学习语法。许多地理处理工作流都可以使用在 ModelBuilder 中创建的模型来完成。这些模型可以共享和修改。但是,ModelBuilder 有一定的局限性,一些更复杂的地理处理操作不能仅靠模型来完成。您可以使用脚本执行一些模型无法执行的特定操作,包括:
- 一些较低级别的任务只能在脚本中执行。例如,游标允许您循环遍历表中的记录,读取现有行并插入新行。
- 脚本允许更高级的编程逻辑,例如高级错误处理和使用更高级的数据结构。许多脚本语言(包括 Python)都已扩展了附加包,可提供更高级的功能。
- 脚本可用于包装其他软件,即将应用程序粘合在一起。此功能有助于集成各种软件应用程序。例如,Python 可用于访问 Microsoft Excel 或统计软件环境 R 中的功能。
- 脚本可以作为 ArcGIS Pro 之外的磁盘上的独立脚本运行。在大多数情况下,您仍必须在计算机上安装 ArcGIS Pro,但无需运行 ArcGIS Pro 即可运行脚本。
可以使用 Python 编辑器创建和运行 Python 脚本。您还可以在 ArcGIS Pro 的 Python 窗口中运行 Python 代码。Python 窗口的工作方式类似于交互式解释器,代码会立即执行。
要在 Python 中运行工具,请键入工具名称,后跟其参数。例如,图中显示的 Python 代码运行 Clip 工具。
结果将打印到 Python 窗口,并将生成的要素类添加到当前地图。
请注意,Python 代码使用了 arcpy。这是 ArcPy 包,第 5 章详细介绍了该包。现在不必太担心代码的确切语法。基本思路是,您可以通过键入工具名称及其参数来运行工具。
可以在 Python 窗口中输入 Python 代码并立即运行。您还可以使用文本编辑器或 Python 编辑器在磁盘上创建和运行 Python 文件。Python 文件的扩展名为 .py,称为脚本。脚本是可以从操作系统、Python 编辑器或使用运行脚本的脚本工具运行的程序。以下是每个脚本的示例。
脚本 clip_example.py 中包含的代码在图中以 IDLE 形式显示。此代码是 Clip 工具帮助页面上提供的脚本的修改版本。同样,现在不必太担心确切的语法。
您可以浏览到此脚本的位置并双击文件以运行它。您无需打开 ArcGIS Pro 或在 Python 编辑器中打开脚本即可运行脚本。您可以通过检查 ArcGIS Pro 中的数据来确认脚本执行的结果。直接运行脚本有几个好处 - 最值得注意的是,您可以将脚本设置为在特定时间运行而无需用户干预。
运行脚本的另一种方法是使用 Python 编辑器,例如 IDLE 或 PyCharm。您可以在编辑器中打开脚本,验证其内容,然后运行脚本。与直接从操作系统运行脚本一样,您无需打开 ArcGIS Pro 应用程序即可运行脚本,但您需要在计算机上安装并许可 ArcGIS Pro 才能使用任何地理处理工具。使用 Python 编辑器运行脚本的好处之一是消息会打印到交互式窗口,包括任何错误消息。
运行脚本的第三种方法是创建运行脚本的脚本工具。例如,您可以创建自己的工具箱,创建一个脚本工具(例如,My Clip Tool),然后将 clip_example.py 脚本添加到此工具。
然后,您可以像在 ArcGIS Pro 中运行任何其他地理处理工具一样运行该脚本。在 ArcGIS Pro 中将脚本作为脚本工具运行的好处是,您可以将脚本工具与其他工具和模型集成。该工具有自己的对话框,可以将其添加到 ModelBuilder 中的模型中或由另一个脚本调用。以这种方式运行脚本也不需要任何 Python 知识,因为该工具看起来和感觉起来都像一个常规的地理处理工具。这种相似性使脚本工具适合共享。
到目前为止,此处使用的脚本是基本的,实际上,它的作用只不过是常规的剪辑工具。但是,创建功能超出现有工具的脚本相对容易 - 后面的章节将介绍这些脚本。
3.10 将脚本作为工具运行
如上一节所述,脚本可以以各种方式运行。将脚本作为工具运行是将 Python 脚本集成到 ArcGIS Pro 工作流中的好方法。事实上,Esri 编写的许多标准工具都是用 Python 编写的。例如,考虑分析工具箱中的提取工具集。请注意,按属性分割工具是一个脚本工具,如图所示。
打开工具对话框时,它看起来像一个常规工具,但带有几个必需参数。因此,从普通 ArcGIS Pro 用户的角度来看,所有地理处理工具看起来都一样,包括脚本工具。
对于 ArcGIS Pro 中的大多数系统工具,无法查看底层代码。但是,对于脚本工具,您可以通过打开脚本来查看底层代码。要查看脚本的内容,请右键单击脚本工具,然后单击编辑。编辑显示该工具调用名为 splitbyattribute.py 的脚本。这些脚本通常位于 C:\Program Files\ArcGIS\Pro\Resources\ArcToolBox\Scripts。ArcGIS Pro 附带的几十个系统工具都是脚本工具,可以通过这种方式查看其内容。
图中显示了附加到“按属性分割”工具的 splitbyattribute.py 脚本。
阅读此代码可以为您提供一些编写自己的代码的想法。脚本太长,无法在此详细讨论。但是,基本思想是您可以创建一个脚本并将其作为工具添加到工具箱中,以便它成为其他用户可以使用的脚本工具,而无需直接使用 Python 代码。
请记住,并非所有系统工具都一定会更新以反映 Python 脚本的最新可能性。例如,批处理项目脚本仍然使用“arcgisscripting”模块,即 ArcPy 包的前身。Esri 不一定会更新其所有代码,因为该工具使用旧代码即可正常工作。但是,与早期版本有很大差异的工具可能会被重写。
作为系统工具一部分的脚本工具是只读的,无法编辑。但是,您可以复制部分代码,也可以将脚本文件本身复制到其他位置并对脚本进行编辑。
3.11 安排 Python 脚本在规定时间运行
独立脚本可以设置为在规定时间运行。计划对于执行日常数据维护任务等非常有用。计划步骤如下:
- 在搜索栏中,键入任务计划程序。单击搜索结果中的任务计划程序条目。
- 双击添加计划任务(或创建基本任务)。
- 完成向导上的选项。
配置您希望脚本运行的时间。当系统要求单击您希望 Windows 运行的程序时,单击浏览按钮选择 Python 脚本。
许多 Python 脚本需要参数才能运行。这些可以作为计划任务的一部分进行设置。在向导的最后一个对话框中,选中复选框“单击完成时打开此任务的属性对话框”。
在打开的对话框中,要运行的脚本显示在操作选项卡下。要使用参数运行脚本,可能需要将设置更改为包含 Python 可执行文件、脚本和要传递给脚本的参数的字符串。传递参数类似于从脚本工具将参数传递给脚本的方式。如果运行脚本所需的所有信息都硬编码在脚本本身中,则不需要参数。
安排 Python 脚本在规定的时间运行似乎相对简单,但存在潜在的障碍。首先,必须打开计算机才能执行计划任务。其次,计划任务通常需要管理访问权限,并且必须在设置任务时提供登录信息。最后,许多基于 Windows 的 PC 配置为在一定时间不活动后锁定或注销当前用户,这可能会干扰正在运行的计划任务。在您可以依赖以这种方式运行的脚本之前,值得测试您的计算机配置以确保计划任务正常运行。
要记住的要点
- ArcGIS Pro 中的地理处理框架提供了一个强大而灵活的系统来组织和运行工具。
- ArcGIS Pro 有许多工具,它们作为地理处理框架的一部分组织在工具箱和工具集中。不同类型的工具包括内置工具、脚本工具和模型工具。
- 通过指定工具参数来运行工具,包括输入和输出数据集以及控制工具执行方式的其他参数。
- 环境还控制工具的执行方式,并且可以在不同级别进行设置。最重要的环境设置是当前工作空间。
- 您可以使用模型和脚本创建自己的工具。创建自己的工具后,它们的工作原理与常规工具完全相同。
- ModelBuilder 提供了一种可视化编程语言,用于创建一系列地理处理任务。模型就像流程图。
- Python 提供了一种基于文本的编程语言,用于创建一系列地理处理和其他任务。Python 代码可以直接在 ArcGIS Pro 中的 Python 窗口中运行。Python 脚本(.py 文件)通常由更复杂的代码组成,可以通过多种方式执行:直接从操作系统内部执行、使用 Python 编辑器(如 IDLE)或从 ArcGIS Pro 中的脚本工具执行。
- 模型和脚本工具的工作方式与 ArcGIS Pro 地理处理框架内的工具类似。模型可以转换为脚本,但脚本不能转换为模型,因为它们的功能不同。