在模型中使用迭代器的示例
为解释迭代器的使用,下方的模型示例将使用 Iterate Feature Classes 迭代器在工作空间中对每个要素类进行投影,并根据使用行内变量替换的输入名称动态命名 投影工具的每个输出,然后向每个要素类添加一个新字段。
- 将为 迭代要素类指定一个输入工作空间,以在该工作空间中迭代每个要素类。
- 将通过指定通配符和要素类型来限制要迭代的要素类(将只迭代名称以 I 开头的面要素类)。
- 迭代要素类将生成两个输出:迭代的要素类和此要素类的名称。要素类变量将作为输入连接到 投影工具,而要素类名称变量将用于行内变量替换,以使用与输入要素类相同的名称动态命名 投影工具的每个输出。
- 将通过连接添加字段工具向每个要素类添加一个新字段。
注:
- 每个模型仅可使用一个迭代器。如果模型中已经存在一个迭代器,那么用于添加迭代器的选项将不可用。
- 如果模型中添加了一个迭代器,那么模型中的所有工具会对迭代器中的每个值进行迭代。如果您不想针对每个被迭代的值运行模型中的所有工具,请创建一个只包含迭代器的模型/嵌套模型内的子模型/模型并将其作为模型工具添加到主要模型中。
- 如果将含有迭代器的模型导出为 Python 脚本,则导出的脚本中将不会包括迭代逻辑。可以将 Python 列表逻辑添加到脚本以获得相似效果。
- 使用迭代器可将模型属性中迭代选项的默认值设为 -1,该值用以表示模型运行的次数无限制,或者表示模型将基于迭代器中的输入数值非设定的次数来运行。
- 连接到迭代器的任何工具的输出对于每次迭代均可具有(如有必要)一个唯一的名称,以免被后续迭代所覆盖,具体方法是,
- 使用系统变量 %n%。例如,C:\Scratch\scratch.gdb\output_%n%)
- 将模型中所使用的迭代器的“名称”或“值”输出用作行内变量,例如,C:\Scratch\scratch.gdb\output_%Name%、C:\Scratch\scratch.gdb\output_%Value%。
- 将模型中的任何其他变量用作行内变量;例如,如果存在变量 XYZ,则输出名称可以是 C:\Scratch\scratch.gdb\output_%XYZ%。该变量中不应包含常量值,只能是随每次迭代而变化的值;否则,每次迭代都会覆盖先前生成的文件。
- 在选中添加至显示选项的情况下,工具输出将会以变量名称为图层名称被添加到 ArcMap 的显示画面中。如果要使用实际的唯一输出名称(而不是变量名称)将每次迭代的输出结果都添加到 ArcMap 的显示画面中:
- 将要显示的输出连接到收集值工具。
- 右键单击收集值的输出并选中添加至显示。
- 如果要从模型工具对话框运行模型,请将收集值的输出设为模型参数,因为系统只会将输出模型参数添加到显示画面。
相关主题
5/10/2014