Filter (arcpy)
サマリ
The filter object allows you to specify the choices available for a parameter.
説明
filter オブジェクトを使用すると、ユーザが利用できるパラメータを指定できます。たとえば、選択肢をテキスト フィールドだけに制限するフィールド フィルタを設定できます。フィルタには、3 つの働きがあります。
- フィルタは、ユーザに対してデータの参照時に有効な選択肢だけを提供します。ポイント フィーチャクラスにフィルタを設定する場合、ユーザがデータを参照するときに、ポイント フィーチャクラスだけが表示されます。テキスト フィールドにフィルタを設定する場合、フィールドのドロップダウン リストにはテキスト フィールドだけが表示されます。
- ユーザが(リストやファイル ブラウザから値を選択するのではなく)パラメータ値を入力する場合、その値がフィルタに対してチェックされます。ユーザが不正な値(テキスト フィールドではなく数値フィールドなど)を入力した場合、警告またはエラーが自動的に設定されます。
- 値はフィルタに対して内部整合チェックでチェックされるため、フィルタを使用することで、ToolValidator クラス内に独自の整合チェックをプログラムする必要がなくなります。
フィルタを指定するには、次の 2 つの方法があります。
- ツールのプロパティ ダイアログ ボックスの [パラメータ] タブで、パラメータをクリックしてから、[フィルタ] の横にあるセルをクリックして、ドロップダウン リストからフィルタ タイプを選択します。フィルタ タイプを選択すると、ダイアログ ボックスが開くので、フィルタの値を指定します。
- ToolValidator クラス内のプログラムで値を設定できます(以下に例を示します)。ジオプロセシングは、文字列、long、double、フィーチャクラス、ファイル、フィールド、ワークスペースのタイプのパラメータに対して、フィルタを自動的に作成します。ツールのプロパティ ダイアログ ボックスでフィルタを選択していない場合でも、パラメータには空のフィルタが関連付けられています。空のフィルタは、フィルタがない場合と同じです。空のフィルタに値を追加することで、フィルタを有効化して、ユーザの選択肢をフィルタの内容に制限することができます。
特性
プロパティ | 説明 | データ タイプ |
list (読み書き) |
If you do not want to filter values, set the list property to an empty list. The datatype specifiied depends on the filter type (ValueList, Range, FeatureClass, File, Field, and Workspace). | String |
type (読み書き) |
The type of filter (ValueList, Range, FeatureClass, File, Field, and Workspace). You can set the type of filter when dealing with Long and Double parameters. For other types of parameters, there is only one valid type of filter, so setting the type on these parameters is ignored. If you do not want to filter values, set the List property to an empty list. | Object |
コードのサンプル
An example of dynamically updating a Value List Filter containing a choice list of keywords. If the user enters "OLD_FORMAT" in the second parameter, the third parameter contains "POINT, LINE, and POLYGON". If "NEW_FORMAT" is entered, the third parameter contains three additional choices.
class ToolValidator:
def __init__(self):
import arcpy
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
An example where the Value List Filter in the second parameter changes based on the shape type found in the first parameter, a feature class.
def updateParameters(self):
# Update the value list filter in the second parameter based on the
# shape type in the first parameter
#
stringFilter = self.params[1].filter
fc = self.params[0].value
if fc:
shapetype = arcpy.Describe(fc).shapeType.lower()
if shapetype == "point" or shapetype == "multipoint":
stringFilter.list = ["RED", "GREEN", "BLUE"]
elif shapetype == "polygon":
stringFilter.list = ["WHITE", "GRAY", "BLACK"]
else:
stringFilter.list = ["ORANGE", "INDIGO", "VIOLET"]
else:
stringFilter.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 = stringFilter.list[0]
return