Filter

Краткая информация

Объект Filter позволяет указать варианты значений параметра.

Обсуждение

Объект Filter позволяет указать варианты значений параметра, доступные пользователю. Например, можно установить фильтр поля, ограничивающий варианты текстовыми полями. Фильтр выполняет три задания:

  • Фильтр только представляет возможного пользователя с доступными вариантами выбора при обзоре данных. Если вы установите фильтр на точечный класс объектов, только точечные классы объектов будут показаны при обзоре данных пользователем. Если вы установите фильтр на текстовые поля, ниспадающий список полей покажет только текстовые поля.
  • Если пользователь вводит значение параметра (вместо выбора значения из списка или обзора файлов), значение будет проверено фильтром. Если пользователь вводит некорректное значение (например, числовое поле вместо текстового поля), выводится предупреждение или ошибка.
  • Поскольку значения проверяются фильтром с помощью внутренней проверки, вам не придется программировать пользовательскую проверку в классе ToolValidator.

Есть два способа их определения фильтров:

  • На вкладке Параметры диалогового окна свойств инструмента, выберите параметр, затем щелкните ячейку рядом с Фильтром и выберите тип фильтра из ниспадающего списка. После того, как вы выбрали тип фильтра, появится диалоговое окно, где вы сможете задать значения для фильтра.
  • Вы можете задать значения программно в классе ToolValidator (примеры приведены ниже). Это предоставляет ряд возможностей настройки, которые невозможно использовать в диалоговом окне свойств инструмента, включая задание динамических фильтров на основе значений других параметров, фильтров для составных типов данных и нескольких типов фильтров для одного и того же параметра. Геообработка автоматически создает фильтры для параметров, имеющих тип string, long, double, класс пространственных объектов, файл, поле и рабочая область. Если вы не хотите выбрать фильтр в диалоговом окне свойств инструмента, все равно существует фильтр, который связан с параметром – просто он является пустым. Пустой фильтр равнозначен отсутствию фильтра. Добавляя значения в пустой фильтр, вы активизируйте фильтр, и варианты, из которых может выбирать пользователь, ограничены установками фильтра.

Свойства

СвойствоОписаниеТип данных
list
(чтение и запись)

Если вы не хотите фильтровать значения, установите свойство списка на пустой список (empty list).

Задаваемый тип данных зависит от типа фильтра (ValueList, Range, FeatureClass, File, Field и Workspace).

String
type
(чтение и запись)

Тип фильтра (ValueList, Range, FeatureClass, File, Field и Workspace). Вы можете задать тип фильтра при использовании параметров Long, Double, Linear Unit, Areal Unit и Time Unit. Для других типов параметров существует только один корректный тип фильтра, поэтому задание типа для этих параметров игнорируется. Если вы не хотите фильтровать значения, задайте для свойства list пустой список.

String

Пример кода

Пример фильтра 1

Ниже приведен пример динамического обновления фильтра списка значений, содержащего список выбора ключевых слов. Если пользователь вводит "OLD_FORMAT" в качестве значения второго параметра, третий параметр содержит "POINT", "LINE", "POLYGON". Если введено "NEW_FORMAT", третий параметр содержит три дополнительных варианта выбора.

import arcpy

class ToolValidator:
    def __init__(self):
        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
Пример фильтра 2

В этом примере фильтр списка значений во втором параметре изменяет основанный на типе геометрии класс пространственных объектов, находящийся в первом параметре:

def updateParameters(self):
    # Update the value list filter in the second parameter based
    # on the shape type in the first parameter

    string_filter = self.params[1].filter
    feature_class = self.params[0].value
    if feature_class:
        shape_type = arcpy.Describe(feature_class).shapeType
        if shape_type in ["Point", "Multipoint"]:
            string_filter.list = ["RED", "GREEN", "BLUE"]
        elif shape_type == "Polygon":
            string_filter.list = ["WHITE", "GRAY", "BLACK"]
        else:
            string_filter.list = ["ORANGE", "INDIGO", "VIOLET"]
    else:
        string_filter.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 = string_filter.list[0]

    return
Пример фильтра 3

В этом примере фильтр списка значений в третьем параметре заполняется атрибутами из поля, выбранного во втором параметре.

def updateParameters(self):
    # Update the value list filter in the third parameter based on the
	   # attributes of the field selected in the second parameter

    if self.params[1].value:
        fc = self.params[0].value
        field = self.params[1].valueAsText
        values = self.params[2].filter
        attribute_values = [row[0] for row in arcpy.da.SearchCursor(fc, [field])]
        unique_attributes = set(attribute_values)
        values.list = [int(value) for value in unique_attributes]
    return

Связанные разделы