Практически все инструменты имеют параметры, вы задаете их значения в диалоговом окне или внутри скрипта. При запуске инструмента значения параметров отправляются в исходный код инструмента. Инструмент считывает эти значения и продолжает работу.
Более подробно о параметрах см. Понятие параметров инструмента-скрипта.
В наборе инструментов Python (.pyt) параметры инструментов определяются в методе класса инструментов getParameterInfo при создании объектов Parameter и определении их свойств.
ParameterУ объектов есть много свойств чтения/записи, но свойства, которые необходимо установить для каждого параметра, включают следующие:
Свойство | Описание |
---|---|
displayName | Имя параметра, отображаемое в диалоговом окне инструмента. |
name | Имя параметра, отображаемое в синтаксисе инструмента в Python. |
datatype | Каждый параметр инструмента в наборе инструментов Python имеет соответствующий тип данных. После открытия диалогового окна инструмента-скрипта, геообработка использует типы данных для проверки значений параметров. Тип данных также используется для обзора данных – только данные с совпадающим типом данных параметра будут показаны в диалоговом окне Обзор. Список типов данных параметров приведен в разделе Определение типов данных параметров в наборах инструментов Python. |
parameterType | Для типа параметра parameterType доступны три варианта:
|
direction | В данном свойстве определяется, представляет ли параметр входные данные для инструмента или выходные. Если для parameterType определено Derived, то для параметра direction нужно указать Output. |
В приведенном ниже примере определено три параметра инструмента: входной параметр, который принимает значение типа векторный слой, входной параметр, который принимает новое имя поля и производный выходной параметр, основанный на первом входном параметре. Для отражения параметров в инструменте необходимо возвращать параметр по завершении выполнения метода getParameterInfo.
def getParameterInfo(self):
#Define parameter definitions
# First parameter
param0 = arcpy.Parameter(
displayName="Input Features",
name="in_features",
datatype="GPFeatureLayer",
parameterType="Required",
direction="Input")
# Second parameter
param1 = arcpy.Parameter(
displayName="Sinuosity Field",
name="sinuosity_field",
datatype="Field",
parameterType="Optional",
direction="Input")
param1.value = "sinuosity"
# Third parameter
param2 = arcpy.Parameter(
displayName="Output Features",
name="out_features",
datatype="GPFeatureLayer",
parameterType="Derived",
direction="Output")
param2.parameterDependencies = [param0.name]
param2.schema.clone = True
params = [param0, param1, param2]
return params
Работа с производными выходными данными
Последний параметр в приведенном выше примере является производным выходным параметром. Существует пять следующих способов использования производных выходных параметров:
- На выходе получается то же, что и на входе, например, Вычислить поле или как в примере выше. Вычислить поле изменяет значение определенного поля во входной таблице – он не создает новой таблицы и не изменяет схему входных данных. Другие инструменты, где выходные данные совпадают с входными, можно найти в Наборе инструментов Редактирование.
- Инструмент изменяет схему входных данных, например, Добавить поле. Добавить поле добавляет поле во входную таблицу – он не создает новой выходной таблицы.
- Инструмент формирует выходные данные, используя информацию в других параметрах, например, инструмент Создать класс пространственных объектов. С помощью инструмента Создать класс пространственных объектов, можно задать рабочую область и имя нового класса объектов, после чего будет создан класс пространственных объектов.
- В противоположность набору данных, инструмент дает на выходе скалярное значение. Посчитать строки, например, дает на выходе значение типа long -длинное целое (количество записей). Всегда, когда инструмент дает на выходе скалярное значение, выходные данные имеют тип Derived.
- Инструмент будет создавать данные в известном местоположении. Например, может существовать скрипт, который обновляет существующую таблицу в известной рабочей области. Пользователь не должен указывать таблицу в диалоговом окне или в скрипте.
Создание многозначных параметров
Если вы хотите, чтобы параметр работал со списком значений, а не с одним значением, установите для свойства multiValue значение True.
def getParameterInfo(self):
param0 = arcpy.Parameter(
displayName="Input Features",
name="in_features",
datatype="GPFeatureLayer",
parameterType="Required",
direction="Input",
multiValue=True)
Пример элемента управления multivalue описан ниже.
Создание параметров с таблицами значений
Для некоторых параметров, которые носят название таблицы значений, возможен ввод нескольких значений. Например, можно включить несколько наборов данных для параметра Входные объекты в инструментах Присоединить, Объединение и некоторых других инструментах; вы также можете включить несколько полей для параметра Поля статистики в инструментах Слияние и Суммарная статистика.
Параметры с таблицами значений определяются путем установки для datatype значения GPValueTable и определения для свойства columns типов данных и заголовков столбцов параметра. В приведенном ниже примере параметр с таблицей значений задается двумя столбцами, которые принимают значения имен полей и текстовые значения для параметра Statistic Type (GPString). С помощью ValueListфильтра и списка значений можно сформировать ниспадающий список под соответствующим столбцом GPValueTable. Для определения значений по умолчанию для параметра таблицы значений используйте свойство values и задайте значения для параметра в виде списка списков значений.
def getParameterInfo(self):
param0 = arcpy.Parameter(
displayName ='Input Features',
name ='in_features',
datatype ="GPFeatureLayer",
parameterType ='Required',
direction ='Input')
param1 = arcpy.Parameter(
displayName='Statistics Field(s)',
name='stat_fields',
datatype='GPValueTable',
parameterType='Required',
direction='Input')
param1.parameterDependencies = [param0.name]
param1.columns = [['Field', 'Field'], ['GPString', 'Statistic Type']]
param1.filters[1].type = 'ValueList'
param1.values = [['NAME', 'SUM']]
param1.filters[1].list = ['SUM', 'MIN', 'MAX', 'STDEV', 'MEAN']
Установка значений параметра по умолчанию
Установить значение по умолчанию для параметра можно двумя способами: непосредственной установкой значения с помощью свойства value или посредством использования значения параметра среды с помощью defaultEnvironmentName.
Значению по умолчанию будет присваиваться содержимое параметра, когда открыто диалоговое окно инструмента скрипта. Это же значение будет использовано, если для параметра в скрипте вводится #. Если вы не задаете value, то при открытии диалогового окна скрипта значение параметра будет пустым.
Установка значения по умолчанию на основе параметра среды
Вы можете сделать значение параметра среды значением по умолчанию для параметра, установив для свойства defaultEnvironmentName имя параметра среды. Как только вы выбрали параметр среды, свойство value будет игнорироваться.
def getParameterInfo(self):
param0 = arcpy.Parameter(
displayName="Input Workspace",
name="in_workspace",
datatype="DEWorkspace",
parameterType="Required",
direction="Input")
# In the tool's dialog box, the first parameter will show
# the workspace environment's value (if set)
param0.defaultEnvironmentName = "workspace"
Определение схемы параметра
У каждого выходного параметра следующих типов: класс пространственных объектов, таблица, растр или рабочая область – есть объект схемы. Только у выходных классов пространственных объектов, таблиц, растров и рабочих областей есть схема (schema) – у других типов его нет. Объект схемы создается для вас процессом геообработки. К схеме осуществляется доступ через объект 'параметр', и устанавливаются правила для описания выходных данных инструмента. После установки правил схемы код внутренней проверки анализирует эти правила и обновляет описание выходных данных.
Когда типом данных datatype входного параметра является Feature Set (Набор объектов) или Record Set (Набор записей), то необходимо установить fieldsRule и geometryType для вводимых объектов.
О наборах объектов и наборах записей
Типы Feature Set и Record Set позволяют выполнять ввод данных интерактивно. Feature Set (Набор объектов) позволяет пользователю скрипта интерактивно создавать пространственные объекты в ArcMap, щелкая на карте. Record Set (Набор записей) позволяет пользователю интерактивно создавать строки в панели таблицы.
Символы и схема (атрибуты и тип геометрии) могут быть установлены для элементов управления Feature Set и Record Set посредством установки для свойства параметра value значения класс пространственных объектов, таблица или файл слоя (.lyrx).
def getParameterInfo(self):
param0 = arcpy.Parameter(
displayName="Input Feature Set",
name="in_feature_set",
datatype="GPFeatureRecordSetLayer",
parameterType="Required",
direction="Input")
# Use __file__ attribute to find the .lyr file (assuming the
# .pyt and .lyr files exist in the same folder)
param0.value = os.path.join(os.path.dirname(__file__),
'Fire_Station.lyrx')
Применение фильтров к параметру
Применение фильтров к параметру позволяет сузить число вариантов, доступных на выбор для этого параметра. Например, можно установить фильтр поля, ограничивающий варианты только текстовыми полями.
Геообработка автоматически создает фильтры для параметров, имеющих тип string, long, double, класс пространственных объектов, файл, поле и рабочая область. Даже если вы не хотите устанавливать фильтр для параметра, он все равно существует и связан с параметром – просто он является пустым. Пустой фильтр равнозначен отсутствию фильтра. Добавляя значения в пустой фильтр, вы его активируете, и тогда варианты, из которых может выбирать пользователь, будут ограничены содержимым фильтра.
- Фильтр только представляет возможного пользователя с доступными вариантами выбора при обзоре данных. Если вы установите фильтр на точечный класс объектов, только точечные классы объектов будут показаны при обзоре данных пользователем. Если вы установите фильтр на текстовые поля, ниспадающий список полей покажет только текстовые поля.
- Если пользователь вводит значение параметра (вместо выбора значения из списка или обзора файлов), значение будет проверено фильтром. Если пользователь вводит некорректное значение (например, числовое поле вместо текстового поля), автоматически выводится предупреждение или ошибка.
Если в качестве значений параметра необходимо вводить только определенные значения или типы наборов данных, то можно задать фильтр. Задайте соответствующее значение для filtertype. Существует семь типов фильтров, а какой тип фильтра можно выбрать зависит от типа данных параметра.
Тип фильтра | Значения |
---|---|
Список значений | Список строковых или числовых значений. Используется со следующими типами данных параметра: String, Long, Double и Boolean. |
Интервал | Минимальное и максимальное значение. Используется с типами данных Long и Double. |
Класс пространственных объектов | Список возможных типов классов пространственных объектов: "Point" (Точка), "Multipoint" (Мультиточка), "Polyline" (Полилиния), "Polygon" (Полигон), "MultiPatch" (Мультипатч), "Annotation" (Аннотация) и "Dimension" (Размер). В фильтре можно задать несколько значений. |
Файл | Список суффиксов файлов, например, ['zip', 'xml']. |
Поле | Список возможных типов полей: Short, Long, Single, Double, Text, Date, OID, Geometry, Blob, Raster, GUID, GlobalID и XML. В фильтре можно задать несколько значений. |
Рабочая область | Список возможных типов рабочей области: Файловая система, Локальная база данных или Удаленная база данных. Может быть задано более одного значения. |
Тип единиц измерения режима передвижения | Список допустимых атрибутов импеданса режима движения: Время, Расстояние, другое. |
Свойство | Описание |
---|---|
type | Тип фильтра (Список значений (ValueList), Диапазон (Range), Класс объектов (FeatureClass), Файл (File), Поле (Field), и Рабочая область (Workspace)). Вы можете задать тип фильтра при работе с параметрами Long и Double (см. примечание ниже). Для других типов параметров существует только один корректный тип фильтра, поэтому задание типа для этих параметров игнорируется. Если вы не хотите фильтровать значения, установите свойство списка на пустой список (empty list). |
list | Список значений для фильтра. Если вы не хотите фильтровать значения, установите свойство списка на пустой список (empty list). |
Как правило, можно выбрать только один тип фильтра. Только для типов данных Long и Doubles существует два варианта: Value List и Range.
Список значений
Фильтр списка значений оптимален при определении набора ключевых слов. Многие инструменты уже имеют предопределенный набор ключевых слов, например, параметр Тип поля для инструмента Добавить поле или параметр Соединить атрибуты для многих инструментов в Группе инструментов наложения.
Фильтр списка значений может использоваться для данных типа Long и Double. Для этих типов вводятся допустимые числовые значения.
def getParameterInfo(self):
param0 = arcpy.Parameter(
displayName="Input value",
name="in_value",
datatype="GPLong",
parameterType="Required",
direction="Input")
# Set a value list of 1, 10 and 100
param0.filter.type = "ValueList"
param0.filter.list = [1, 10, 100]
Если необходимо, чтобы пользователь имел возможность выбрать более одного значения, установите для свойства multiValue значение True.
Фильтр списка значений может использоваться для логического типа данных. Для типа данных Boolean список значений содержит два значения: true и false. Истинное значение (true) всегда идет в списке первым. Значения, указанные в списке Значение, используются в Python при установке значения. Например, ключевые слова Добавить поле и NULLABLE, а ключевые слова NON_NULLABLE используются для параметра Field IsNullable.
Интервал
Для параметров с типом данных Long и Double может быть установлен фильтр диапазона. У фильтров диапазона два значения: минимум и максимум. Первым в списке идет минимальное значение. Диапазон является инклюзивным, то есть в него входят минимальное и максимальное значения.
def getParameterInfo(self):
param0 = arcpy.Parameter(
displayName="Input range",
name="in_range",
datatype="GPLong",
parameterType="Required",
direction="Input")
# Set an acceptable range of 1 to 10
param0.filter.type = "Range"
param0.filter.list = [1, 10]
Класс пространственных объектов
В данном фильтре выберите одно или несколько значений фильтра. Входные классы объектов будут сравниваться со значениями, установленными в фильтре. Так, например, если в фильтре установлен только тип Point, то в качестве значений параметра пользователь сможет вводить только классы точечных пространственных объектов.
def getParameterInfo(self):
param0 = arcpy.Parameter(
displayName="Input Features",
name="in_features",
datatype="GPFeatureLayer",
parameterType="Required",
direction="Input")
param0.filter.list = ["Polygon"]
Файл
Файл filter содержит список допустимых суффиксов файлов, например, txt (простой текстовый файл) и csv (значения, разделенные запятыми). Можно использовать любое расширение. Совсем не обязательно, чтобы приложение ArcGIS распознавало расширение. Расширение может иметь любую длину и не должно содержать точек.
def getParameterInfo(self):
param0 = arcpy.Parameter(
displayName="Input File",
name="in_file",
datatype="DEFile",
parameterType="Required",
direction="Input")
# To define a file filter that includes .csv and .txt extensions,
# set the filter list to a list of file extension names
param0.filter.list = ['txt', 'csv']
Поле
Фильтр поля filter определяет допустимые типы полей: Short, Long, Float, Single, Double, Text, Date, OID, Geometry, Blob, Raster, GUID, GlobalID и XML. В фильтре можно задать несколько значений.
def getParameterInfo(self):
param0 = arcpy.Parameter(
displayName="Input Features",
name="in_features",
datatype="GPFeatureLayer",
parameterType="Required",
direction="Input")
param1 = arcpy.Parameter(
displayName="Field",
name="field",
datatype="Field",
parameterType="Required",
direction="Input")
# Set the filter to accept only fields that are Short or Long type
param1.filter.list = ['Short', 'Long']
param1.parameterDependencies = [param0.name]
Рабочая область
В фильтре рабочей области filter определяются типы допустимых входных рабочих областей. Существует три значения:
Фильтры рабочей области | Описание |
---|---|
Файловая система | Системная папка, используемая для хранения шейп-файлов, покрытий, таблиц INFO и сеток |
Локальная база данных | Персональная или файловая база геоданных |
Удаленная база данных | Подключение многопользовательской базы геоданных |
def getParameterInfo(self):
param0 = arcpy.Parameter(
displayName="Input Workspace",
name="in_workspace",
datatype="DEWorkspace",
parameterType="Required",
direction="Input")
# Set the filter to accept only local (personal or file) geodatabases
param0.filter.list = ["Local Database"]
Тип единиц измерения режима передвижения
Тип единиц измерения режима передвижения filter можно использовать для установки допустимых типов режима передвижения на основе единиц измерения атрибута Импеданс режима передвижения. Допустимые параметры: Время, Расстояние и Другие.
def getParameterInfo(self):
param1 = arcpy.Parameter(
displayName="Travel Mode",
name="travel_mode",
datatype="NetworkTravelMode",
parameterType="Required",
direction="Input")
# Set the parameter to be dependent on the Network Data Source parameter
param1.parameterDependencies = [param0.name]
# Set the filter to accept only time-based travel modes
param1.filter.list = ["Time"]
parameterDependencies
Свойство parameterDependencies используется для двух целей:
- Для производного выходного параметра свойству parameterDependencies присваивается значение входного параметра, которое будет изменено инструментом.
- Для входных параметров свойство parameterDependencies содержит имена других параметров, используемых этим типом данных.
# Third parameter
param2 = arcpy.Parameter(
displayName="Output Features",
name="out_features",
datatype="GPFeatureLayer",
parameterType="Derived",
direction="Output")
param2.parameterDependencies = [param0.name]
param2.schema.clone = True
Вы можете установить свойство parameterDependencies только для определенных входных параметров, как показано в таблице ниже.
Тип входных данных | Тип данных зависимого параметра | Описание |
---|---|---|
Поле или выражение SQL | Таблица | Таблица, содержащая поля |
Элемент INFO или выражение INFO | Таблица INFO | Таблица INFO, содержащая элементы |
Класс объектов покрытия | Покрытие | Покрытие, содержащее объекты |
Единицы площади и длины | Набор геоданных | Географический набор данных, используемый для определения единиц по умолчанию |
Система координат | Рабочая область | Рабочая область, используемая для определения системы координат по умолчанию |
Настройки иерархии Network Analyst | Набор сетевых данных | Набор сетевых данных, содержащий информацию об иерархии |
Таблица геостатистических значений | Геостатистический слой | Таблица наборов данных и полей, используемых в инструментах Geostatistical Analyst |
symbology
Если выходными данными инструмента являются набор пространственных объектов, растр, TIN или слой Network Analyst, то можно указать расположение файла слоя (.lyrx) с помощью свойства symbology. Когда ваш инструмент выполняется, результат выводится на экран и отображается с использованием символов, определенных в файле слоя символов.
def getParameterInfo(self):
param0 = arcpy.Parameter(
displayName="Input Raster",
name="in_raster",
datatype="DERasterDataset",
parameterType="Required",
direction="Input")
param1 = arcpy.Parameter(
displayName="Output Raster",
name="out_raster",
datatype="DERasterDataset",
parameterType="Required",
direction="Output")
# Use __file__ attribute to find the .lyr file (assuming the
# .pyt and .lyr files exist in the same folder).
param1.symbology = os.path.join(os.path.dirname(__file__),
'raster_symbology.lyrx')
Примечание:
Файл слоя считывается каждый раз при запуске инструмента. Если файл слоя не удается обнаружить (так как он был перемещен или удален), будут использоваться условные обозначения по умолчанию.
category
Параметры могут быть сгруппированы в различные категории, чтобы минимизировать размер диалогового окна инструмента, или в связанные с группой параметры, которые будут редко использоваться. Параметры, которые устанавливают category в одно и то же строковое значение, будут объединены в группу. Несколько инструментов дополнительного модуля ArcGIS Network Analyst используют категории, как показано ниже.
Категории всегда идут после параметров, не помещенных в категорию. Не помещайте необходимые параметры в категории, поскольку в таком случае их не будет видно в диалоговом окне инструмента.