Установка параметров инструмента-скрипта
Практически все инструменты имеют параметры, и вы задаете их значения в диалоговом окне или внутри скрипта. При запуске инструмента значения параметров отправляются в исходный код инструмента. Инструмент считывает эти значения и продолжает работу.
Более подробно о параметрах см. Понятие параметров инструмента-скрипта.
Параметры инструмента-скрипта могут быть установлены при помощи мастера Добавить скрипт (Add Script). Кроме того, для добавления, удаления и изменения параметров инструмента-скрипта служит диалоговое окно Свойства (Properties). Для того чтобы открыть свойства инструмента-скрипта, щелкните правой кнопкой мыши инструмент-скрипт, выберите Свойства (Properties), а затем перейдите на закладку Параметры (Parameters).
Независимо от того, где задаются параметры: в мастере Добавить скрипт (Add Script) или диалоговом окне Свойства (Properties), процедура установки одинакова и описана ниже.
Для добавления нового параметра щелкните первую пустую ячейку в столбце Отображаемое имя (Display Name) и введите имя параметра. Это имя будет отображаться на диалоговом окне инструмента, и оно может содержать пробелы. В синтаксисе Python имя параметра будет совпадать с отображаемым именем, только пробелы будут заменены нижними подчеркиваниями (_).
После ввода отображаемого имени параметра выберите для него тип данных, щелкнув ячейку в столбце Тип данных (Data Type), как показано ниже.
Для каждого параметра можно установить дополнительные свойства, как показано ниже.
Свойство |
Описание |
---|---|
Доступны значения Required (Обязательный), Optional (Необязательный) и Derived (Производный). Derived (Производный) означает, что пользователь инструмента не вводит значения параметра. Производные типы всегда являются выходными параметрами. |
|
Варианты: Входное (Input) или Выходное (Output). Если тип параметра – производный, его направление всегда будет выходным. |
|
Многозначность имеет значение Да (Yes), если необходим список значений, и Нет (No), если необходимо одиночное значение. |
|
Значение по умолчанию для параметра. Когда тип данных параметра является либо набором пространственных данных, либо набором записей, параметр По умолчанию (Default) заменяется параметром Схема (Schema). |
|
Если значение параметра по умолчанию подставляется из параметров среды, это свойство должно содержать имя нужного параметра среды. |
|
Если в качестве значений параметра необходимо вводить только определенные значения или типы наборов данных, то можно задать фильтр. Существует шесть типов фильтров, а какой тип фильтра можно выбрать зависит от типа данных параметра. |
|
Это свойство применимо к производным выходным параметрам, а также к типам данных с входным параметром. Для производных выходных параметров свойство Получено из (Obtained from) может указывать на параметр, содержащий определение выходных данных. Для входных параметров свойство Получено из (Obtained from) указывает на параметр, содержащий информацию, необходимую для входных данных. |
|
Это свойство применимо только к выходным параметрам. Его значение – местоположение файла слоя (.lyr), содержащего символы для отображения выходных данных. |
Тип
Для этого свойства имеется три варианта:
- Пользователю необходимо ввести значение параметра Required (обязательный). Инструмент не может быть запущен в работу, пока пользователь не задаст значение параметра.
- Optional (дополнительный) параметр не требует от пользователя обязательного ввода значения.
- Derived (Производный) параметр может быть только выходным (см. свойство Направление). Производный выходной параметр не отображается в диалоговом окне инструмента.
Существует пять следующих способов использования производных выходных параметров:
- Выходной параметр совпадает с входным, например, как в инструменте Вычислить поле (Calculate Field). Вычислить поле изменяет значение определенного поля во входной таблице – он не создает новой таблицы и не изменяет схему входных данных. Другие инструменты, где выходные данные совпадают с входными, можно найти в Наборе инструментов Редактирование (Editing toolbox).
- Инструмент изменяет схему входных данных, например Добавить поле (Add Field). Добавить поле добавляет поле во входную таблицу – он не создает новой выходной таблицы.
- Инструмент формирует выходные данные, используя информацию в других параметрах, например, инструмент Создать класс пространственных объектов (Create Feature Class). С помощью инструмента Создать класс пространственных объектов, можно задать рабочую область и имя нового класса объектов, после чего будет создан класс пространственных объектов.
- В противоположность набору данных, инструмент дает на выходе скалярное значение. Посчитать строки (Get Count), например, дает на выходе значение типа long integer – длинное целое (количество записей). Всегда, когда инструмент дает на выходе скалярное значение, выходные данные имеют тип Derived (производный).
- Инструмент будет создавать данные в известном местоположении. Например, может существовать скрипт, который обновляет существующую таблицу в известной рабочей области. Пользователь не должен указывать таблицу в диалоговом окне или в скрипте.
Если инструмент-скрипт имеет производные выходные данные, следует задать значение производного выходного параметра в скрипте при помощи функции SetParameterAsText().
Все инструменты должны иметь выходные данные
Все инструменты-скрипты должны иметь выходные параметры, чтобы они могли использоваться в приложении ModelBuilder. Основной принцип ModelBuilder – соединение выходных данных одних инструментов с входными данными других, и если инструмент-скрипт не имеет выходного параметра, он не очень пригоден для построения модели. В крайнем случае, выходным параметром может быть логическая переменная, указывающая на успешное (или нет) завершение работы инструмента.
Производные выходные данные, изменяющие входной параметр
На рисунке ниже показан гипотетический инструмент-скрипт Обновить значения полей (Update Field Values), используемый в ModelBuilder. (Допустим, что этот инструмент, Обновить значения полей (Update Field Values), предназначен для исследования содержимого нескольких известных текстовых полей и исправления опечаток в них.) Инструмент Обновить значения полей (Update Field Values) не создает новый класс пространственных объектов, а обновляет значения полей во входном классе объектов.
На рисунке ниже показано корректное определение параметров для инструмента Обновить значения полей, где Обновить значения полей имеет выходной параметр (класс пространственных объектов) с Типом, заданным как производный. Поскольку для этого инструмента выходные данные совпадают с входными, свойство Получено из (Obtained from) указывает на входной параметр. (В свойстве Получено из (Obtained from) стоит имя этого параметра – отображаемое имя, в котором пробелы заменены нижними подчеркиваниями.)
Производные выходные данные, не изменяющие входной параметр
На рисунке ниже показан другой инструмент, в котором выходные данные являются производными, но при этом они не получены из входного параметра (Свойство Получено из (Obtained from) оставлено пустым). В этом примере гипотетический инструмент Отправка данных в хранилище (Post Data to Repository) копирует входной класс пространственных объектов в известную рабочую область (хранилище), затем добавляет поле даты/времени и заполняет его.
Установка выходного значения
На примере, рассмотренном выше, обратите внимание, что инструмент Скопировать объекты (Copy Features) является пустым (имеет белый, а не желтый цвет). Так происходит потому, что переменная Выходные объекты (Output features), хотя и отмечена зеленым, пока не содержит значения, так как имя и местоположение выходных объектов неизвестно до запуска инструмента. В этом случае в скрипте должно быть указано выходное значение при помощи функции ArcPy SetParameterAsText(). Функция SetParameterAsText() задаст значение выходного параметра либо при помощи текстовой строки, либо при помощи объекта, например, таблицы значений.
Есть возможность указать значение выходного параметра до запуска инструмента при помощи кода проверки.
Более подробно о проверке инструментов
Рассмотрим пример кода с функцией SetParameterAsText(), предназначенный для описанного выше скрипта Отправка данных в хранилище (Post Data to Repository).
# Post data to Repository - copies the input features to the
# current repository, adding and populating a date
# field
#
# Import system modules and arcpy
#
import sys
import string
import os
import arcpy
# Get the value of the input parameter
#
inFC = arcpy.GetParameterAsText(0)
# Create the pathname to the output feature class.
# 1) get the name of the feature class
# 2) remove any file extension, such as ".shp"
# (we're copying to a geodatabase which doesn't
# allow file extensions, like .shp)
#
fcName = os.path.basename(inFC)
fcName = os.path.splitext(fcName)[0]
repository = "e:/repository/featuredata.gdb"
outFC = os.path.join(repository, fcName)
# Copy the input to the output, add the date field
#
arcpy.CopyFeatures_management(inFC, outFC)
arcpy.AddField_management(outFC, "PostDate", "DATE")
# Create a locale-specific string containing the current date
# and time, then calculate it into the PostDate field, adding
# the required quotes around the postTime string.
#
import time
postTime = time.strftime("%x %X")
arcpy.AddMessage(postTime)
qPostTime = "\"" + postTime + "\""
arcpy.CalculateField_management(outFC, "PostDate", qPostTime)
# Set output parameter
#
arcpy.SetParameterAsText(1, outFC)
Выходные значения вместо данных
Вышеприведенные примеры иллюстрируют получение производных наборов данных. Тем не менее, некоторые скрипты имеют не выходные данные, а выходные значения, например инструмент Посчитать строки (Get Count), который получает на выходе целое число типа Long, равное числу строк в таблице. Использование выходных значений вместо данных встречается довольно часто. Могут потребоваться и собственные скрипты, выполняющие анализ нескольких наборов данных, связанных отношением, и выдающие результат в виде нескольких чисел или вовсе в виде одного логического значения, указывающего на успешное или неуспешное прохождение проверки.
Выходные параметры, содержащие типы данных, соответствующие значениям (например, типы Long (длинное целое) или Boolean (логическое значение)), всегда являются производными, а не обязательными.
Направление
В данном свойстве определяется, представляет ли параметр входные данные для инструмента или выходные.
Если тип параметра – производный, то направление параметра автоматически задается как выходное.
Многозначные
Если необходимо, чтобы параметр работал со списком значений, а не с одним значением, установите для свойства Многозначность (MultiValue) значение Да (Yes).
В диалоговых окнах инструментов для работы с множественными значениями могут применяться два различных элемента пользовательского интерфейса. Эти элементы показаны ниже.
- Список с отметками используется для полей, строк, длинных целых и чисел с двойной точностью, если они содержат фильтр ValueList.
- Все остальные типы данных отображают элемент управления многозначных параметров.
Оба типа многозначных элементов управления проиллюстрированы ниже.
Многозначные значения передаются в скрипт в виде строк, разделенных точками с запятой. Из этого рисунка видно, что если бы пользователь выбрал все типы дорог, для параметра было бы установлено значение Interstates;Primary roads;Secondary roads. Для разбиения строки с разделителями применяется метод Python split(), как показано ниже в примере.
roadTypes = arcpy.GetParameterAsText(0)
roadTypeList = roadTypes.split(";")
# Process each road type
#
for rType in roadTypeList:
# rType contains an individual road type string (ex: "Interstates")
#
arcpy.AddMessage("Processing: " + rType)
По умолчанию
Значению по умолчанию будет присваиваться содержимое параметра, когда открыто диалоговое окно инструмента скрипта. Это же значение будет использовано, если для параметра в скрипте вводится #. Если не задано значение свойства По умолчанию (Default), то при открытии диалогового окна скрипта значение параметра будет пустым. Если вы укажете для этого свойства какое-либо значение, то свойство Параметра среды (Environment) будет деактивировано. Для активации свойства Параметр среды (Environment) следует очистить свойство По умолчанию (Default).
Схема
Если тип данных входного параметра – Набор объектов (Feature Set) или Набор записей (Record Set), необходимо указать местоположение схемы, определяющей поля и тип геометрии вводимых пространственных объектов. Схема может быть либо классом пространственных объектов, либо таблицей, либо файлом слоя (.lyr).
О наборах объектов и наборах записей
Типы Feature Set (Набор объектов) и Record Set (Набор записей) позволяют выполнять ввод данных интерактивно. Feature Set (Набор объектов) позволяет пользователю скрипта интерактивно создавать пространственные объекты в ArcMap, щелкая на карте. Record Set (Набор записей) позволяет пользователю интерактивно создавать строки в простой таблице.
Для получения более подробной информации по наборам объектов и записей, перейдите по указанным ниже ссылкам.
Тема |
Описание |
---|---|
В данном разделе рассказывается, как в Python используются объекты FeatureSet (Набор объектов) и RecordSet (Набор записей). |
|
Использование средств интерактивного ввода объектов и записей |
В данном разделе рассказывается, как использовать элементы управления Набор объектов (Feature Set) и Набор записей (Record Set). |
Среда
Можно установить значение параметра по умолчанию равным значению параметра среды, щелкнув правой кнопкой на ячейке рядом со словами Параметр среды (Environment) и выбрав имя нужного параметра среды. Как только выбран параметр среды, свойство По умолчанию (Default) будет игнорироваться. Для использования свойства По умолчанию (Default) вместо свойства Параметр среды (Environment), следует очистить свойство Параметр среды (Environment), выбрав из ниспадающего списка пустой элемент.
Фильтр
Если в качестве значений параметра необходимо вводить только определенные значения или типы наборов данных, то можно задать фильтр. Щелкните ячейку рядом со словом Фильтр (Filter) и выберите подходящий фильтр из ниспадающего списка. Откроется диалоговое окно, где следует указать значения для выбранного фильтра. Существует шесть типов фильтров, а какой тип фильтра можно выбрать зависит от типа данных параметра.
Тип фильтра |
Значения |
---|---|
Список значений |
Список строковых или числовых значений. Используется со следующими типами данных параметра: String (Строковый), Long (Длинное целое), Double (с двойной точностью) и Boolean (Логический). |
Диапазон |
Минимальное и максимальное значение. Используется с типами данных Long (Длинное целое) и Double (С двойной точностью). |
Класс пространственных объектов |
Список возможных типов классов пространственных объектов: "Point" (Точка), "Multipoint" (Мультиточка), "Polyline" (Полилиния), "Polygon" (Полигон), "MultiPatch" (Мультипатч), "Sphere" (Сфера), "Annotation" (Аннотация) и "Dimension" (Размер). В фильтре можно задать несколько значений. |
Файл |
Список суффиксов файлов, например, ".txt", ".e00", ".ditamap". |
Поле |
Список возможных типов полей: Short (Короткое целое), Long (Длинное целое), Single (Вещественное с одной точностью), Double (С двойной точностью), Text (Текст), Date (Дата), OID (Идентификатор объекта), Geometry (Геометрия), Blob (Большой двоичный объект), Raster (Растр), GUID (Глобальный уникальный идентификатор), GlobalID (Глобальный идентификатор) и XML. В фильтре можно задать несколько значений. |
Рабочая область |
Список возможных типов рабочей области: File System (Файловая система), Local Database (Локальная база данных) или Remote Database (Удаленная база данных). Может быть задано более одного значения. |
Как правило, можно выбрать только один тип фильтра. Два варианта имеется только для типов данных Long и Double – это Value List (Список значений) и Range (Диапазон).
Кроме того, фильтры можно настраивать программным способом с использованием Python, настроив класс ToolValidator инструмента скрипта.
Список значений
Фильтр списка значений оптимален при определении набора ключевых слов. Многие инструменты уже имеют предопределенный набор ключевых слов, например параметр Тип поля (Field Type) для инструмента Добавить поле (Add Field) или параметр Соединить атрибуты (Join Attributes) для многих инструментов в Группе инструментов наложения (Overlay toolset).
Фильтр списка значений может использоваться для данных типа Long и Double. Для этих типов вводятся допустимые числовые значения.
Если необходимо, чтобы пользователь имел возможность выбрать более одного значения, установите для свойства Multivalue значение Yes (Да).
Фильтр списка значений может использоваться для логического типа данных. Для типа данных Boolean (Логический) Список значений содержит два значения: истина и ложь. Истинное значение (true) всегда идет в списке первым. Эти значения используются в командной строке при установке значения. См., например, ключевые слова Add Field (Добавить поле) и {NULLABLE | NON_NULLABLE}, используемые для свойства IsNullable.
Диапазон
Для параметров с типом данных Long (Длинное целое) и Double (С двойной точностью) может быть установлен фильтр диапазона. У фильтров диапазона два значения: минимум и максимум. Первым в списке идет минимальное значение. Диапазон является инклюзивным, то есть в него входят минимальное и максимальное значения.
Класс пространственных объектов
В данном фильтре выберите одно или несколько значений фильтра. Входные классы объектов будут сравниваться со значениями, установленными в фильтре. Например, если в фильтре установлен только тип Points (Точки), в качестве значений параметра пользователь может вводить только классы точеных пространственных объектов.
Файл
Фильтр файлов содержит список допустимых суффиксов файлов, таких как txt (простой текстовый файл) или csv (значения, разделенные запятыми). Можно использовать любое расширение. Совсем не обязательно, чтобы приложение ArcGIS распознавало расширение. Расширение может иметь любую длину и не должно содержать точек.
Поле
В фильтре поля задаются допустимые типы полей: "Short" (Короткое целое), "Long" (Длинное целое), "Single" (С одной точностью), "Double" (С двойной точностью), "Text" (Тест), "Date" (Дата), "OID", "Geometry" (Геометрия), "Blob" (Большой двоичный объект), "Raster" (Растр), "GUID" (Глобальный уникальный идентификатор), "GlobalID" (Глобальный идентификатор), "XML". В фильтре можно задать несколько значений.
Рабочая область
В фильтре рабочей области указываются типы допустимых рабочих областей на входе. Существует три значения:
- Файловая система
Папка на диске, используемая для хранения шейп-файлов, покрытий, таблиц INFO и гридов
- Локальная база данных
Персональная или файловая база геоданных
- Удаленная база данных
Подключение базы данных ArcSDE
Получено из
Свойство Получено из (Obtained from) имеет два предназначения:
- Для производного выходного параметра свойству Получено из (Obtained from) присваивается входной параметр, который будет изменен инструментом. Дополнительная информация о производных данных и о свойстве Получено из (Obtained from) приведена в главе выше, посвященной свойству Тип (Type).
- Для входных параметров свойство Получено из (Obtained from) содержит имена других параметров, используемых этим типом данных. К примеру, для входного параметра с типом данных Поле (field), свойство Получено из (Obtained from) имеет значение имени параметра, указывающего на таблицу, содержащую нужные поля, как показано ниже.
Задать свойство Получено из (Obtained from) можно только для определенных входных параметров, как показано в таблице ниже.
Тип входных данных |
Типы данных Получено из |
Описание |
---|---|---|
Поле или выражение SQL |
Таблица |
Таблица, содержащая поля |
Элемент INFO или выражение INFO |
Таблица INFO |
Таблица INFO, содержащая элементы |
Класс пространственных объектов покрытия |
Покрытие |
Покрытие, содержащее объекты |
Единицы площади и длины |
Набор геоданных (GeoDataset) |
Географический набор данных, используемый для определения единиц по умолчанию |
Система координат |
Рабочая область |
Рабочая область, используемая для определения системы координат по умолчанию |
Настройки иерархии Network Analyst |
Набор сетевых данных |
Набор сетевых данных, содержащий информацию об иерархии |
Таблица геостатистических значений |
Геостатистический слой |
Слой анализа, содержащий таблицы |
Символы
Если на выходе инструмента возвращается набор классов пространственных объектов, растр, TIN или слой сетевых данных для дополнительного модуля ArcGIS Network Analyst , то можно указать расположение файла слоя (.lyr) в свойстве Символы (Symbology). Если инструмент запускается из ArcMap, ArcGlobe или ArcScene, и включена опция Добавить к изображению результаты операций геообработки (Add results of geoprocessing operations to the display), то будут отображаться выходные результаты и прорисовка выполняется с использованием условных обозначений, определенных в файле слоя условных обозначений.
Файл слоя считывается каждый раз при запуске инструмента. Если файл слоя не удается обнаружить (так как он был перемещен или удален), будут использоваться условные обозначения по умолчанию.