Filter (arcpy)
Резюме
Объект filter (фильтр) позволяет указать варианты значений параметра.
Обсуждение
Объект filter (фильтр) позволяет указать варианты значений параметра, доступные пользователю. Например, можно установить фильтр поля, ограничивающий варианты только текстовыми полями. Фильтр выполняет три задания:
- Фильтр только представляет возможного пользователя с доступными вариантами выбора при обзоре данных. Если вы установите фильтр на точечный класс объектов, только точечные классы объектов будут показаны при обзоре данных пользователем. Если вы установите фильтр на текстовые поля, ниспадающий список полей покажет только текстовые поля.
- Если пользователь вводит значение параметра (вместо выбора значения из списка или обзора файлов), значение будет проверено фильтром. Если пользователь вводит некорректное значение (например, числовое поле вместо текстового поля), автоматически выводится предупреждение или ошибка.
- Поскольку значения проверяются фильтром с помощью внутренней проверки, фильтр освобождает вас от программирования вашей собственной проверки в классе ИнструментПроверки (ToolValidator).
Есть два способа их определения фильтров:
- На закладке Параметры (Parameters) диалогового окна свойств инструмента, выберите параметр, затем щелкните ячейку рядом с Фильтром (Filter) и выберите тип фильтра из ниспадающего списка. После того, как вы выбрали тип фильтра, откроется диалоговое окно, где вы сможете задать значения для фильтра.
- Вы можете задать значения программно в классе ИнструментПроверки (ToolValidator) (примеры приведены ниже). В процессе геообработки автоматически создаются фильтры для типов: string (строковый), long (длинное целое), double (с двойной точностью), feature class (класс пространственных объектов), file (файл), field (поле) и рабочая область. Даже если вы не хотите выбрать фильтр в диалоговом окне свойств инструмента, все равно существует фильтр, который связан с параметром – просто он является пустым. Пустой фильтр равнозначен отсутствию фильтра. Добавляя значения в пустой фильтр, вы активизируйте фильтр, и варианты, из которых может выбирать пользователь, ограничены установками фильтра.
Свойства
Свойство | Объяснение | Тип данных |
list (чтение и запись) |
Если вы не хотите фильтровать значения, установите свойство списка на пустой список (empty list). Указанный тип данных зависит от типа фильтра (Список значений (ValueList), Диапазон (Range), Класс объектов (FeatureClass), Файл (File), Поле (Field), и Рабочая область (Workspace)). | String |
type (чтение и запись) |
Тип фильтра (Список значений (Value List), Диапазон (Range), Класс объектов (Feature Class), Файл (File), Поле (Field), и Рабочая область (Workspace)). Вы можете задать тип фильтра при работе с параметрами Long и Double. Для других типов параметров существует только один корректный тип фильтра, поэтому задание типа для этих параметров игнорируется. Если вы не хотите фильтровать значения, установите в качестве свойства List пустой список. | Object |
Пример кода
Пример динамического обновления Фильтра списка значений (Value List Filter), содержащего список выбора ключевых слов. Если пользователь введет "СТАРЫЙ ФОРМАТ (OLD_FORMAT)" во втором параметре, то третий параметр будет содержать "ТОЧКА (POINT)", "ЛИНИЯ (LINE)" и "ПОЛИГОН (POLYGON)". Если введено "НОВЫЙ ФОРМАТ (NEW_FORMAT)", то третий параметр будет содержать три дополнительных выбора.
class ToolValidator:
def __init__(self):
import arcpy
self.params = arcpy.GetParameterInfo()
def initializeParameters(self):
return
def updateParameters(self):
# Provide default values for "file format type" and
# "feature type in file"
#
if not self.params[1].altered:
self.params[1].value = "OLD_FORMAT"
if not self.params[2].altered:
self.params[2].value = "POINT"
# Update the value list filter of the "feature type in file" parameter
# depending on the type of file (old vs. new format) input
#
if self.params[1].value == "OLD_FORMAT":
self.params[2].filter.list = ["POINT", "LINE", "POLYGON"]
elif self.params[1].value == "NEW_FORMAT":
self.params[2].filter.list = ["POINT", "LINE", "POLYGON",
"POINT_WITH_ANNO",
"LINE_WITH_ANNO",
"POLYGON_WITH_ANNO"]
return
def updateMessages(self):
return
Пример, в котором фильтр списка значений во втором параметре изменяет основанный на типе геометрии класс пространственных объектов, находящийся в первом параметре.
def updateParameters(self):
# Update the value list filter in the second parameter based on the
# shape type in the first parameter
#
stringFilter = self.params[1].filter
fc = self.params[0].value
if fc:
shapetype = arcpy.Describe(fc).shapeType.lower()
if shapetype == "point" or shapetype == "multipoint":
stringFilter.list = ["RED", "GREEN", "BLUE"]
elif shapetype == "polygon":
stringFilter.list = ["WHITE", "GRAY", "BLACK"]
else:
stringFilter.list = ["ORANGE", "INDIGO", "VIOLET"]
else:
stringFilter.list = ["RED", "GREEN", "BLUE"]
# If the user hasn't changed the keyword value, set it to the default value
# (first value in the value list filter).
#
if not self.params[1].altered:
self.params[1].value = stringFilter.list[0]
return