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

Пример кода

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

Пример динамического обновления фильтра списка значений, содержащего список выбора ключевых слов. Если пользователь введет "СТАРЫЙ ФОРМАТ (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

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