ArcGIS Model Builder:如何创建自定义工具箱并导出为Python脚本

如何在ARCGIS中使用模型构建器和创建自定义工具箱

Model-Builder-ArcGIS-Python-Script-678x322
本示例说明了如何在ArcGIS中使用模型构建器。它包括一个演示如何创建自定义工具箱和将模型导出为Python脚本的演示。

作者:GIS地理

什么是ArcGIS Desktop和ArcGIS Pro中的模型构建器?

ArcGIS中的模型构建器可自动执行GIS工作流。例如,如果您每周运行一个缓冲,相交并生成数据透视表的报表,那么您可以创建一个模型并每周运行。

您无需创建一个模型,而是一个模型一个模型地获取您的输入,然后使用一系列工具对其进行转换,然后将其输出。换句话说,模型构建器将您的输入连接到地理处理工具,并将其转换为所需的输出。

最好的部分?

在模型构建器中创建模型时,可以将其作为日常工作流程的一部分运行。例如,您可以重用模型并将其共享给其他用户进行交互。

遵循以下逐步操作,使用您自己的数据和工具。当然,如果您有任何疑问,请不要害怕在下面的评论框中提问。

模型构建器示例–如何设置您的第一个模型

让我们从这个简单的示例开始,说明如何在模型构建器中创建模型。假设您在一家计划在何处建立管道的公司工作。为了符合环境法规,管道距离濒临灭绝的鸟巢不能500米。

由于工程师经常修改管道的设计,因此每次更改管道的对齐方式时,他们都希望使用电子表格。在此报告中,他们想知道管道是否在任何燕窝的500米范围内。

一个模型通常至少包含三个元素:

  • 输入数据(蓝色方块)
  • 地理处理工具(黄色圆圈)
  • 输出数据(绿色方块)

在我们的模型构建器示例中,这是两个输入:

输入1。管道对齐(红色和黑色虚线)
输入2。濒临灭绝的鸟巢

这些输入在地图上的外观如下:

ModelBuilder-PipelineBirdNests-678x378

工具1.缓冲管道500米的
工具2.将鸟巢与管道缓冲
工具相交3.将报告生成为电子表格

输出1.缓冲区,缓冲区中有鸟巢,报告

让我们从这个简单的分步示例开始,该示例如何在Model Builder中构建模型。

步骤1打开模型构建器

首先,单击“模型构建器”图标以开始创建模型。这将打开“模型构建器”窗口,供您开始添加地理处理工具。

ModelBuilder-Icon

步骤2将工具添加到模型构建器

从ArcToolbox拖放缓冲区,相交工具和Excel电子表格转换工具。

ModelBuilder-GeoprocessingTools-678x334

步骤3输入工具参数

双击每个工具(矩形),然后输入以下输入和输出:

缓冲区:
输入功能:管道重排
输出功能类:C: Temp Pipeline_Buffer.shp(确保此目录存在,或在必要时创建一个新文件夹)
线性距离:500米

交叉:
输入特征:鸟巢和Pipeline_Buffer.shp
输出特征类:C: Temp BirdNest_Intersect.shp

表到EXCEL:
输入表:BirdNest_Intersect.shp
输出Excel文件:C: Temp Report.xls

输入每个工具的输入和输出后,“模型构建器”窗口将类似于以下屏幕截图。但是,它看起来杂乱无章,自动布局工具可以帮助清理所有内容。

ModelBuilder-AutoLayout-678x335

步骤4自动版面配置

单击自动布局按钮后,地理处理工具,输入和输出将在模型构建器窗口中整齐地重新排列。

ModelBuilder-FinalModel-678x335

模型构建器示例:运行模型

当然,到目前为止,我们仅构建了模型。为了创建报告,我们仍然必须运行模型。您可以通过单击“播放”按钮来运行模型。

ModelBuilder-RunModel-678x335

运行模型后,可以将输出要素类添加到ArcMap以验证其正确性。双击report.xls,它会列出管道500米以内的所有鸟巢。在这种情况下,只有加利福尼亚秃鹰。

Model-Builder-Results-678x282

还要注意的另一件事是,在您运行模型之后,模型中的圆形和正方形将具有阴影。检查(C: Temp )以查看其创建的每个产品(缓冲区,相交和报告)。

但是,实际上,您唯一需要的输出就是报告。缓冲区和相交只是临时(中间)数据集。从“模型构建器”窗口运行模型后,它不会删除它创建的所有中间输出(缓冲区和相交)。

因此,如果要重新运行模型,则可以手动进入该文件夹(“ C: Temp ”)并删除这些要素类。另外,您可能必须单击“自动布局”图标旁边的“对勾”图标以验证模型。

模型构建器工具箱:设置参数/变量

假设您公司中的另一个小组希望将此模型用于相同的目的。但是它们的输入数据和输出数据具有完全不同的名称。

您需要将它们作为参数动态而不是静态输入和输出。将输入数据或输出数据设置为参数时,用户可以输入自己的数据并设置自己的输出路径。

如何设置模型构建器参数?

步骤1设置输入的模型参数

右键单击两个输入数据集(鸟巢和管线),然后单击“模型参数”

步骤2设置输出模型参数

右键单击您的输出数据集(报告),然后单击“模型参数”

ModelBuilder-ModelParameter-678x348

但是,我们还必须更改一件事-它如何处理中间数据。ArcGIS Model Builder有一个方便的命令“ in_memory”来处理它。

对于每个临时输出(缓冲区和相交),我们可以使用“ in_memory”将它们转换为临时数据集。例如,双击绿色框(pipeline_buffer),然后进行如下更改:

ModelBuilder-InMemory

完成此步骤后,您的模型的每个模型参数旁边应带有“ P”。另外,您的临时缓冲区和相交的输出应具有“ in_memory”。

ModelBuilder-ParametersVariables-678x288

删除(C: Temp )中的所有文件。现在,当您单击“运行模型”时,它将仅创建XLS报告。这是因为您设置了缓冲区并将其作为临时数据(in_memory)相交。

如何在ArcGIS中创建工具箱

现在,我们已经将输入和输出设置为参数,如果它本身可以是一个工具箱,那不是很好吗?工具箱方便共享。他们看起来很专业。而且它们很容易创建。

首先,让我们清空参数,以便我们共享时没有默认路径。双击模型构建器中的每个模型参数并将其清空。

ModelBuilder-EmptyParameter

清空每个参数后,该模型应为白色,如下面的屏幕截图所示:

ModelBuilder-SaveModel-678x255

现在,您将要保存模型。但是您将需要一个工具箱来这样做。单击“保存”后,单击对话框右上方的新工具箱图标。

ModelBuilder-NewToolbox

您可以将新工具箱命名为“ Pipeline.tbx”。现在,双击该新工具箱并将模型保存在工具箱中。

ArcCatalog中,找到您刚刚保存此工具箱的位置。展开工具箱,以便您可以看到新的工具集。

ModelBuilder-PipelineToolbox

双击您创建的新工具集。现在,我们已经创建了参数并清空了参数,现在您可以动态输入输入和输出了。

ModelBuilder-PipelineReportTool-500x279

如何将模型导出为Python脚本

从ArcGIS 9.0开始,它已经彻底改变了其编程接口,从VBA到Python。通过使用Python库,您可以扩展ArcGIS。但是,既然Python已被证明是一个很棒的工具,那么您应该从哪里开始呢?当然,您可以从python.org开始,但这是很多信息。

节省时间的另一种方法是使用ModelBuilder并为您的工作流创建模型。使模型正常工作后,将模型作为脚本导出(模型>导出>到Python脚本)。此导出的输出提供了一个很好的起点,您可以在其中更改Python代码,甚至包括其他Python软件包。

ModelBuilder-ExportAsPythonScript-678x308

这可能是您开始在ArcGIS中学习Python脚本的最佳方法之一。您可以看到ModelBuilder如何使用arcpy模块,脚本参数,局部变量和地理处理工具分解代码。

这些是您在ArcGIS帮助库底部看到的相同代码示例。每个地理处理工具都有一个代码示例,可在Python窗口中使用或作为该特定工具的独立脚本使用。

模型构建器迭代器

迭代器有助于为模型构建器中的一组输入重复一个过程。ArcGIS Model Builder具有不同类型的迭代器来重复过程。

例如,如果要以不同的增量为缓冲区设置多个距离,则可以使用“ FOR”迭代器。使用我们现有模型中的缓冲工具,可以以不同的增量设置“ FROM”和“ TO”变量。

ModelBuilder-ForIterator

在上面的“模型开发器”窗口中,我们向模型添加了迭代器。如“ FOR”迭代器中所述,这将动态设置缓冲区距离。

其他可用的迭代器有:“ while”,“行选择”,“功能选择”,“多值”等。

ArcGIS Desktop中的模型构建器

因为在您的工作中,时间至关重要。您需要以惊人的速度提供现实GIS问题的答案。

ArcGIS中的模型构建器可自动执行GIS工作流。创建模型时,它可以重复执行分析。

与其一次一次手动运行每个工具,不如尝试将它们放入模型中。

模型构建器是分析GIS数据的可靠方法,并且可以节省大量时间。