Filter (arcpy)

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

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

Обсуждение

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

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

Свойства

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

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

Указанный тип данных зависит от типа фильтра (Список значений (ValueList), Диапазон (Range), Класс объектов (FeatureClass), Файл (File), Поле (Field), и Рабочая область (Workspace)).

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

Тип фильтра (Список значений (Value List), Диапазон (Range), Класс объектов (Feature Class), Файл (File), Поле (Field), и Рабочая область (Workspace)). Вы можете задать тип фильтра при работе с параметрами Long и Double. Для других типов параметров существует только один корректный тип фильтра, поэтому задание типа для этих параметров игнорируется. Если вы не хотите фильтровать значения, установите в качестве свойства List пустой список.

String

Пример кода

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

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

Связанные темы

5/10/2014