Краткий обзор использования итераторов
Итерация, иногда называемая циклической организацией, обеспечивает неоднократное повторение процесса с определенной степенью автоматизации. Итерация очень важна, поскольку автоматизация повторяющихся задач способствует уменьшению времени и усилий, необходимых для выполнения задач. Итерация в ModelBuilder позволяет выполнять процесс снова и снова, используя в каждой итерации другие параметры или данные. Применение ModelBuilder способствует также повышению гибкости итерации, поскольку неоднократно могут выполняться и вся модель, и просто единственный инструмент или процесс.
Итератор |
Описание |
---|---|
Выполняет итерации с начального до конечного значения данной переменной. Он работает так же, как и оператор For в любом языке программирования/написания скриптов, выполняя итерацию заданное число раз. |
|
Работает точно так же, как While в любом другом языке программирования/написания скриптов и выполняется, пока условие является истинным. |
|
Выполняет итерации над объектами в классе пространственных объектов. |
|
Выполняет итерации для строк в таблице. |
|
Выполняет итерации для каждого значения в поле. |
|
Выполняет итерации для списка значений. |
|
Выполняет итерации для каждого набора данных в Рабочей области (Workspace) или в Наборе классов объектов (Feature Dataset). |
|
Выполняет итерации для классов пространственных объектов в рабочей области или в наборе классов объектов. |
|
Выполняет итерации над файлами в папке. |
|
Выполняет итерации для растров в Рабочей области (Workspace) или в Каталоге растров (Raster Catalog). |
|
Выполняет итерации для таблиц в рабочей области. |
|
Выполняет итерации с рабочими областями в папке. |
Работа с итераторами
Каждый итератор имеет ряд параметров, которые могут отличаться от других итераторов, но общая структура всех инструментов итератора весьма аналогична. Ниже описан широко применяемый итератор Iterate Feature Classes (Итерировать классы объектов).
Для итератора Iterate Feature Classes (Итерировать классы объектов) требуется Входная рабочая область (Input Workspace), в которой хранятся все классы объектов, подлежащие итерации. Для наложения ограничений на то, какие классы объектов в рабочем пространстве подлежат применению итераций, используются два дополнительных параметра, Групповой символ (Wildcard) и Тип Объекта (Feature Type):
- Групповой символ налагает ограничения на классы объектов с учетом их имен.
- Тип объекта налагает ограничения на классы объектов с учетом их типа: аннотация, дуга, размер, ребро, соединение, надпись, линия, узел, точка, полигон, область, маршрут или TIC.
Параметр Рекурсивный (Recursive) используется для управления итерацией по классам объектов в пределах вложенных папок в рабочем пространстве.
Iterate Feature Classes (Итерировать классы объектов) имеет две выходные переменные: выходной класс пространственных объектов и имя класса объектов. Выходной класс объектов может быть подключен к следующему инструменту для обработки, а переменная Имя (Name) может использоваться для подстановки встроенной переменной. Например, если бы инструмент Буфер (Buffer) был добавлен к модели, а переменная Класс объектов (Feature Class) была подключена к инструменту, то произошла бы буферизация каждого класса пространственных объектов в рабочем пространстве.
Вход и выход итератора
Ниже приведен список итераторов и показаны их входные и выходные данные. Ряд итераторов имеет в качестве второго выхода «Значение (Value)» или «Имя (Name)», что может использоваться для подстановки встроенной переменной.
Итератор |
Входные данные |
Результат 1 |
Результат 2 |
---|---|---|---|
Значения |
Значение |
- |
|
Значения |
Булевы значения True или False |
- |
|
Пространственные объекты |
Пространственный объект |
Значение |
|
Таблица |
Запись |
Значение |
|
Таблица |
Значение поля |
- |
|
Значения |
Значение |
- |
|
Рабочая область или Набор классов объектов |
Набор данных |
Имя |
|
Рабочая область или Набор классов объектов |
Класс объектов |
Имя |
|
Папка |
Файл |
Имя |
|
Рабочая область или каталог растров |
Набор растровых данных |
Имя |
|
Рабочая область |
Таблица |
Имя |
|
Папка |
Рабочая область |
Имя |
- Для каждой модели можно использовать только один итератор. Если в модели уже имеется итератор, опции для добавления еще одного итератора будут отключены.
- Если в модель добавлен итератор, все инструменты модели будут повторяться для каждого значения в итераторе. Если вы не хотите запускать каждый инструмент в модели для каждого значения итерации, создайте субмодель/модель в пределах модели/вложенной модели (sub-model/model within a model/nested model), которая содержит только итератор, и добавьте ее как инструмент модели в основную модель.
- Если модель, содержащая итератор, экспортируется в скрипт Python, логика циклов не передается. Логику списков Python (Python listing logic) можно добавить в скрипт для достижения подобного эффекта.
- Использование итератора устанавливает по умолчанию значение -1 в разделе Опции Итератора (Iteration Options) меню Свойства модели (Model Properties), что означает, что модель будет запускаться или неограниченное количество раз или столько раз, сколько задано входных объектов в итераторе, а не какое-то определенное количество раз.
- Выходные данные любого из инструментов, связанных с итератором, могут иметь (если нужно) уникальное имя для каждой итерации, что предотвращает перезапись на
- Использование системной переменной %n%, например C:\Scratch\scratch.gdb\output_%n%.
- Использование выходного Имени (Name) или Значения (Value) итератора, используемого в модели в качестве встроенной переменной, например C:\Scratch\scratch.gdb\output_%Name%, C:\Scratch\scratch.gdb\output_%Value%.
- Использование любой другой переменной в модели в качестве встроенной переменной; например, если имеется переменная XYZ, имя выходных данных может выглядеть следующим образом: C:\Scratch\scratch.gdb\output_%XYZ%. Эта переменная не должна содержать постоянное значение, это значение должно меняться для каждой итерации; в противном случае файл будет перезаписываться при каждой итерации.
- Выходные значения инструмента с отмеченной опцией Добавить в отображение добавляются в отображение ArcMap с использованием имени переменной. Если вы хотите добавить выходные данные каждой итерации, чтобы они показывались в ArcMap с действительным уникальным именем, а не с именем переменной:
- Соедините выходные данные, которые вы хотите показывать, с инструментом Собрать значения (Collect Values).
- Щелкните правой кнопкой мыши по выходным данным инструмента Собрать значения (Collect Values) и отметьте опцию Добавить к изображению (Add to Display).
- Если модель запускается в диалоговом окне инструмента модели, сделайте выходное значение Собрать значение (Collect Value) параметром модели, так как только выходные параметры модели можно добавить для отображения.
Итераторы заменяют параметр ряда в свойствах модели, которые были доступны до выхода версии ArcGIS 10.