使用迭代要素类

摘要

迭代要素类工具用于对工作空间或要素数据集中的要素类进行迭代。 每个迭代器具有一组可能与其他迭代器不同的参数,但是所有迭代器工具的总体结果非常相似。 迭代要素类工具如下所述:

“迭代要素类”参数

  • 输入要素类(输入)- 存储要迭代的要素类的工作空间或要素数据集。
  • 通配符(可选输入)- 用于限制结果的星号和字符的组合。 星号表示允许使用任意字符。 如果未指定通配符,将返回所有输入。
  • 要素类型(可选输入)- 要用作过滤器的要素类型。 仅输出指定类型的要素。 如果不指定要素类型,将返回所有要素类型。
  • 递归(可选输入)- 指定迭代器是否将迭代主工作空间中的所有子文件夹。
  • 要素类(输出)- 要素类的完整路径。
  • 名称(输出)- 要素类的名称。

在此工作流中,您将创建一个模型(如下所示)以迭代和投影输入模型工作空间中的每个要素类,并将输出名称参数用作投影工具的输出要素类名称中的行内变量。 该工作流将带您逐步了解迭代器的每个参数选项,以突出显示其功能。

用于迭代和投影要素类的完成的模型

先决条件

如果您不熟悉 ModelBuilder,请查看以下主题:

打开工程

下载工程以在此工作流中使用。 该工程包括输入数据、输出地理数据库和一个已完成模型。

  1. 打开使用迭代要素类概览页面。
  2. 单击页面右侧的下载
  3. 右键单击下载的 IterateFeatureClasses.zip 文件,然后将其提取到一个方便的位置,例如 C:\Temp
  4. 在提取的文件夹 IterateFeatureClasses 中,双击 ArcGIS Pro 工程文件 IterateFeatureClasses.aprx

    该工程将打开一个空地图,并将用于查看您将创建的模型的结果。

  5. 目录窗格中浏览数据,并在必要时单击工程选项卡。 浏览至 Folders > IterateFeatureClasses

    “数据”文件夹中包含子文件夹;每个子文件夹均包含将在模型中进行迭代和投影的要素类。 该工作流的输出将保存在三个临时*地理数据库中。

添加工具

您将在 MyProjectTools 工具箱中创建一个模型。 要向模型添加工具,请完成以下步骤:

  1. 如有必要,在目录窗格中,单击工程选项卡。 浏览至 Folders > IterateFeatureClasses > MyProjectTools
  2. 右键单击 MyProjectTools,然后单击新建。 选择模型以创建并打开模型。
  3. 添加迭代要素类工具。
    1. 单击 ModelBuilder 选项卡。
    2. 插入组中,单击迭代器 迭代器
    3. 迭代器列表中,单击迭代要素类

    添加“迭代要素类”工具

    迭代要素类迭代器随即会添加到模型中。 由于尚未提供任何参数值,因此迭代器不可用。

  4. 添加投影工具。
    1. 单击模型,然后键入 Project 以打开向模型添加工具对话框。
    2. 搜索投影工具。
    3. 双击投影工具以将其添加到模型。
  5. 添加收集值工具。
    1. 单击 ModelBuilder 选项卡。
    2. 插入组中,单击实用程序按钮 实用工具
    3. 实用程序列表中,单击收集值以将收集值工具添加到模型中。

    添加“收集值”工具

指定工具参数并连接工具

将工具添加到模型后,您需要为每个工具指定参数。

  1. 双击迭代要素类迭代器以打开迭代器的对话框。
    1. 对于工作空间或要素数据集参数,浏览至 FoldersIterateFeatureClassesData 文件夹。
    2. 选中递归复选框,以迭代所有子文件夹中的所有要素类。
    3. 将其余参数留空,然后单击确定

    “迭代要素类”对话框

    工作空间随即作为模型的输入变量(深蓝色椭圆)进行添加并更改迭代器的颜色,指示已提供了所需参数且已做好运行准备。

  2. 双击投影工具以打开工具的对话框。
    1. 单击输入数据集或要素类参数下拉箭头,然后选择 Metro_Entrances.shp
    2. 对于输出数据集或要素类参数,浏览至 <Your Project Location>\IterateFeatureClasses\ScratchAllFC.gdb 地理数据库,然后键入 %Name%_Project
    3. 单击输出坐标系参数上的坐标系按钮 坐标系 以打开坐标系对话框。 选择投影坐标系 > 大陆 > 欧洲 > 欧洲阿尔伯斯等积圆锥。 单击确定关闭对话框。
    4. 保留 NTF_TO_ED_1950 作为地理变换方法。
    5. 填写完所有参数后,立即单击确定以关闭投影工具对话框。

    投影工具对话框

    警告:

    如果输入要素类具有不同的坐标系,则添加的地理变换可能不适用于所有坐标系,并且可能出现数据投影错误。 您应该了解所输入的坐标系以及对其应用的地理变换方法。 在这种情况下,请使用迭代器的通配符参数有选择地投影要素类。 您将在使用通配符可选参数部分中了解到有关使用通配符的详细信息。

  3. 将鼠标悬停在投影工具输出变量上方。 单击并拖动以绘制连接收集值工具元素的连接线。 松开鼠标后,单击弹出菜单中的输入值收集值工具是用于将每次迭代的输出值收集到单个多值输出中的支持工具。
  4. 重命名所有模型变量,如此工作流的完成的模型中所示。
  5. 要排列模型元素,请单击 ModelBuilder 选项卡上的自动布局按钮 自动布局,然后单击适应窗口大小按钮 适应窗口大小 以将布局最大化到模型窗口的大小。

运行模型

您将验证并运行模型。 您将检查 ScratchAllFC.gdb 中的输出,并确认已对“数据”文件夹中的所有要素类进行了迭代和投影。

  1. 右键单击收集值工具的输出,然后单击添加至显示

    运行模型后,输出将被添加到地图。

  2. 单击 ModelBuilder 选项卡上的保存按钮 保存 以保存模型。
  3. 单击 ModelBuilder 选项卡上的运行按钮 运行 以运行模型。
    “迭代要素类”模型的输出

    该模型将迭代“数据”文件夹中的所有要素类,对其进行投影,然后在 ScratchAllFC.gdb 地理数据库中创建输出。

使用“通配符”可选参数

这些步骤将扩展工作流,以帮助您了解迭代器通配符可选参数的用法。

  1. 完成以上各部分并创建输出投影要素类后,双击并打开迭代要素类工具。
  2. 通配符参数中键入 Metro*。 将递归参数保留为选中状态。 这样可以确保模型对所有子文件夹进行迭代,但仅会投影名称以 Metro 开头的要素类。 在运行时,* 将被替换为以 Metro 开头的要素类名称的其余部分。
  3. 单击确定关闭工具对话框。
  4. 打开投影工具对话框,然后将输出数据集或要素类选项更改为 <Your Project Location>\IterateFeatureClasses\ScratchWildCard.gdb\%Name%_Project
  5. 单击确定关闭对话框。
  6. 单击 ModelBuilder 选项卡上的保存按钮 保存 以保存模型。
  7. 单击 ModelBuilder 选项卡上的运行按钮 运行 以运行模型。
    使用通配符的“迭代要素类”模型的输出

    该模型将对名称以 Metro 开头的所有要素类进行迭代,对其进行投影,然后在 ScratchWildCard.gdb 地理数据库中创建输出。

使用“通配符”和“要素类型”可选参数

这些步骤将进一步扩展工作流,以帮助您了解迭代器要素类型可选参数的用法。

  1. 完成使用通配符可选参数部分并创建输出投影要素类后,双击并打开迭代要素类工具。
  2. 单击要素类型参数下拉箭头,然后选择线选项。 这样可以确保模型对名称以 Metro 开头的所有线要素类进行迭代。
  3. 单击确定关闭工具对话框。
  4. 打开投影工具对话框,然后将输出数据集或要素类选项更改为 <Your Project Location>\IterateFeatureClasses\ScratchOnlyLine.gdb\%Name%_Project
  5. 单击 ModelBuilder 选项卡上的保存按钮 保存 以保存模型。
  6. 单击 ModelBuilder 选项卡上的运行按钮 运行 以运行模型。
    使用“通配符”和“要素类型”的“迭代要素类”模型的输出

    该模型将对名称以 Metro 开头的所有线要素类进行迭代,对其进行投影,然后在 ScratchOnlyLine.gdb 地理数据库中创建输出。

  7. 关闭模型和 ArcGIS Pro