Filter

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

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

Обсуждение

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

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

Вы можете задать фильтры, выполнив какие-то из следующих действий:

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

Свойства

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

Указывает значения ограничений фильтра.

Тип значений зависит от свойства type.

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

Указывает тип фильтра.

  • ValueList - список строковых или числовых значений, которые используются с типами данных String, Long, Double, Boolean, Linear Unit, Areal Unit и Time Unit.

    Для строковых и числовых фильтров введите список значений, и только эти значения будут считаться действительными и отображаться в раскрывающемся списке в диалоговом окне инструмента.

    Для типов Linear Unit, Area Unit и Time Unit укажите список строк ключевых слов единиц измерения, и только значения, использующие эти единицы, будут считаться допустимыми и отображаться в раскрывающемся списке единиц измерения в диалоговом окне инструмента.

  • Range - минимальное и максимальное значение, используемое с типами данных Long, Double, Linear Unit, Areal Unit и Time Unit.

    Для фильтров Long и Double предоставляется список с двумя элементами: значение минимума и значение максимума. Только числа между минимальным и максимальным будут считаться допустимыми.

    Для фильтров Linear Unit, Areal Unit и Time Unit Range укажите список с двумя элементами: минимальное и максимальное значение, включая единицу измерения, например ["1 Meters", "100 Meters"].

  • FeatureClass - список допустимых типов классов объектов. Корректные значения: Point, Multipoint, Polyline, Polygon, MultiPatch, Annotation и Dimension.

    В фильтре можно задать несколько значений.

  • File - список суффиксов файлов, например [".txt", ".xml"].
  • Field—список допустимых типов полей, определенных значениями Short, Long, Single, Double, Text, Date, OID, Geometry, Blob, Raster, GUID, GlobalID и XML. В фильтре можно задать несколько значений.
  • Workspace - список допустимых типов рабочей области, определенных значениями FileSystem, LocalDatabase и RemoteDatabase. В фильтре можно задать несколько значений.

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

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