Filter (arcpy)

摘要

filter 对象允许为参数指定用户可用的选择。

讨论

filter 对象允许为参数指定用户可用的选择。例如,可设置仅限选择文本字段的字段过滤器。过滤器执行三项工作:

可通过两种方式指定过滤器:

属性

属性说明数据类型
list
(读写)

如果不想过滤值,可将列表属性设置为空列表。

根据过滤器类型(ValueList、范围、要素类、文件、字段和工作空间)指定的数据类型。

String
type
(读写)

过滤器的类型(ValueList、范围、要素类、文件、字段和工作空间)。在处理长整型参数和双精度型参数时,可设置过滤器的类型。对于其他类型的参数,仅有一种有效的过滤器类型,所以可以忽略这些参数的类型设置。如果不想过滤值,可将列表属性设置为空列表。

String

代码实例

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
Filter 示例 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