模型工具已完全集成到地理处理框架中,并且使用方法与所有系统或脚本工具的使用方法相同。像所有其他地理处理工具一样,您可以通过对话框或 Python 脚本执行模型工具,或将其添加到其他模型并运行它们。
在其他模型中添加和运行某个模型这种理念有时也称为子模型、嵌套模型或模型中的模型。使用这种类型的模型层次结构有两个主要原因:简化大型的复杂模型,或者实现模型迭代器的更高级应用。
简化大型的复杂模型
通过在其他模型中嵌入模型工具,可以将大型的复杂过程划分为更易于在其他模型或脚本中进行管理和重复利用的小模型单位。此外,还可修改这些子模型,并在无需重新运行整个过程的情况下重新运行这些子模型 - 如果某个子模型中出现错误,只需对该子模型进行校正,然后重新运行单个模型,而不必再次运行整个过程。
上面的大模型可分解为四个子模型和一个主模型。较小的子模型可添加到主模型,并连接到最终过程。将子模型添加到其他模型时,子模型的最终输出将以输出变量的形式进行添加。
模型迭代器的高级应用
在其他模型中嵌入模型工具还可以实现模型迭代器的更高级应用。当工作流要求模型迭代时,需要运行多次的特殊工具或过程必须与只需要在每个工作流中运行一次的工具或过程分隔开。在这种情况下,应该将需要运行多次的所有工具放置在一个具有模型迭代器的模型中并将该模型用作子模型。只需运行一次的工具应该放置在主模型中,该主模型会调用迭代子模型。
以下示例是一个自动化工作流,其中合并了一组来自地理数据库的输入。Merge 工具接受多个要素类以输入形式进行合并,但无法自动添加特定工作空间中的所有要素类。在这种情况下,Iterate Feature Classes 模型迭代器可与 Collect Values 工具结合使用,从而读取工作空间中的所有要素类并将其全部存储在单个变量中。由于这两个过程都需要执行多次(迭代),因此它们将被添加到子模型中,而 Merge 工具应该只执行一次,因而将它添加到主模型中,并使其连接到“Iterate Feature Classes/Collect Values”子模型的输出。
下面将逐步介绍如何创建上述的完整工作流。有关以下使用的术语和方法的详细信息,请参阅 ModelBuilder 基本词汇。
- 创建两个模型:主模型和子模型,其中子模型嵌套在主模型中。向主模型添加 Merge 工具,向子模型添加 Iterate Feature Classes 迭代器和 Collect Values 工具。
- 在子模型中,设置包含要以 Iterate Feature Classes 迭代器的输入形式进行合并的要素类的工作空间。要仅迭代点要素类,请将 Iterate Feature Classes 的 Feature Type 参数设置为 POINT。
- 将 Iterate Feature Classes 的输出变量 Output Feature Class 连接到 Collect Values 工具,以便迭代和收集工作空间中各点要素类的路径。
- 将输入工作空间变量和 Collect Values 工具的输出变为模型参数。将输入工作空间变量重命名为 Input Dataset,以确保该变量名称是相关名称且易于理解。。
- 保存并关闭子模型,然后将其作为过程添加到主模型。
- 将子模型的输出变量设置为 Merge 工具的输入数据集。确保 Merge 工具的输出路径为有效路径。
- 将子模型的输入变量重命名为 Input Dataset,并将 Merge 工具的输出变量重命名为 Merge Output。将 Input Dataset 变量和 Merge Output 变量设置为模型参数。