Python ツールボックスでのパラメータの定義
ほぼすべてのツールにはパラメータがあり、そのパラメータ値はツール ダイアログ ボックスまたはスクリプト内で設定します。ツールを実行すると、パラメータ値がツールのソース コードに送られます。ツールはその値を読み込んで、処理を続けます。
パラメータの詳細については、「スクリプト ツールのパラメータの概要」をご参照ください。
Python ツールボックス(*.pyt)のツール パラメータは、ツール クラスの getParameterInfo メソッドで、Parameter オブジェクトを作成し、そのプロパティを設定することで定義します。
Parameter オブジェクトには多くの読み書きプロパティがありますが、すべてのパラメータに対して設定する必要のあるプロパティは次のとおりです。
プロパティ | 説明 |
---|---|
displayName | このツールのダイアログ ボックスで表示されるパラメータ名。 |
name | Python のツールの構文内に表示されるパラメータ名。 |
datatype | Python ツールボックスのすべてのツール パラメータには、それぞれ対応するデータ タイプがあります。ジオプロセシングでスクリプト ツールのダイアログ ボックスを開くと、パラメータ値がデータ タイプと照合してチェックされます。 データを参照する際にもデータ タイプが使用され、パラメータ データ タイプと一致するデータだけが参照ダイアログ ボックスに表示されるようになっています。 パラメータのデータ タイプのリストについては、「Python ツールボックスにあるパラメータのデータ タイプの定義」をご参照ください。 多くのデータ タイプが使用できますが、最も一般的に使用されるデータ タイプは、String、Double、Boolean、Feature Layer、Raster Dataset などです。 |
parameterType | parameterType には 3 つの選択肢があります。
|
direction | このプロパティは、パラメータがツールへの入力とツールの出力のどちらであるかを定義します。 parameterType が Derived に設定されている場合、direction は Output に設定する必要があります。 |
次の例では、フィーチャ レイヤを受け入れる入力パラメータ、新しいフィールド名を受け入れる入力パラメータ、および最初の入力パラメータに基づく派生出力パラメータという 3 つのパラメータがツールに定義されています。ツール内でこれらのパラメータを反映するために、getParameterInfo メソッドの最後にパラメータを返します。
def getParameterInfo(self):
#Define parameter definitions
# First parameter
param0 = arcpy.Parameter(
displayName="Input Features",
name="in_features",
datatype="GPFeatureLayer",
parameterType="Required",
direction="Input")
# Second parameter
param1 = arcpy.Parameter(
displayName="Sinuosity Field",
name="sinuosity_field",
datatype="Field",
parameterType="Optional",
direction="Input")
param1.value = "sinuosity"
# Third parameter
param2 = arcpy.Parameter(
displayName="Output Features",
name="out_features",
datatype="GPFeatureLayer",
parameterType="Derived",
direction="Output")
param2.parameterDependencies = [param0.name]
param2.schema.clone = True
params = [param0, param1, param2]
return params
派生出力の操作
上で示した最後のパラメータは、派生出力パラメータです。派生出力パラメータには、次の 5 つの用途があります。
- 出力が入力と同じ場合([フィールド演算(Calculate Field)] や上で示した例など)。[フィールド演算(Calculate Field)] は、入力テーブルの特定フィールドの値を変更します。これは、新しいテーブルを作成したり、入力のスキーマを変更したりはしません。[編集] ツールボックスには、出力が入力と同じその他のツールがあります。
- ツールが入力のスキーマを変更する場合([フィールドの追加(Add Field)] など)。[フィールドの追加(Add Field)] は、フィールドを入力テーブルに追加します。これは、新しい出力テーブルは作成しません。
- ツールが他のパラメータの情報を使って出力を作成する場合([フィーチャクラスの作成(Create Feature Class)] ツールなど)。[フィーチャクラスの作成(Create Feature Class)] ツールでは、ワークスペースと新しいフィーチャクラスの名前を指定して、フィーチャクラスを作成します。
- ツールがデータセットに対してスカラー値を出力する場合。たとえば、[行のカウント(Get Count)] は、Long の値(レコードの数)を出力します。ツールがスカラー値を出力する場合、出力は必ず [Derived] になります。
- ツールが既知の場所にデータを作成する場合。たとえば、既知のワークスペース内にある既存のテーブルを更新するスクリプトなどが挙げられます。ユーザは、ダイアログ ボックスまたはスクリプト内で、このテーブルを指定する必要はありません。
複数値パラメータの作成
パラメータで単一値ではなく、値のリストを処理できるようにする場合、multiValue プロパティを True に設定します。
ツール ダイアログ ボックスには、複数値で使用するユーザ インタフェース コントロールが、次のように 2 種類あります。
- チェックボックスのリストは、フィールドと、値のリスト フィルタが含まれる場合は文字列、Long、Double に使用されます。
- その他すべてのデータ タイプには、複数値パラメータ コントロールが表示されます。
両方の種類の複数値コントロールは、次のとおりです。
上図では、ユーザがすべての道路タイプを選択した場合、パラメータ値は ["Interstates", "Primary roads", "Secondary roads"] に設定されます。
def getParameterInfo(self):
param0 = arcpy.Parameter(
displayName="Input Features",
name="in_features",
datatype="GPFeatureLayer",
parameterType="Required",
direction="Input",
multiValue=True)
バリュー テーブル パラメータの作成
バリュー テーブルと呼ばれるパラメータを使用すると、複数のエントリを指定できます。たとえば、[アペンド(Append)] や [ユニオン(Union)] をはじめとする多くのツールでは、[入力フィーチャ] パラメータに複数のデータセットを含めることができ、[ディゾルブ(Dissolve)] ツールと [要約統計量(Summary Statistics)] ツールでは [統計フィールド] パラメータに複数のフィールドを含めることができます。
バリュー テーブル パラメータを定義するには、datatype を GPValueTable に設定し、columns プロパティを設定してパラメータのデータ タイプと列見出しを定義します。次の例では、バリュー テーブル パラメータは、フィーチャ レイヤと整数値(GPLong)を受け入れる 2 つの列を持つように定義されています。
def getParameterInfo(self):
param0 = arcpy.Parameter(
displayName='Input Features',
name='in_features',
datatype='GPValueTable',
parameterType='Required',
direction='Input')
param0.columns = [['GPFeatureLayer', 'Features'], ['GPLong', 'Ranks']]
バリュー テーブル パラメータにデフォルト値を設定するには、values プロパティを使用し、値のリストにパラメータ値を指定します。
パラメータのデフォルト値の設定
パラメータのデフォルト値を設定するには、value プロパティを使用して値を直接適用するか、defaultEnvironmentName を使用して環境設定の値を適用します。
デフォルト値は、スクリプトのツール ダイアログ ボックスが開いたときのパラメータの内容になります。また、スクリプト内のパラメータに # が入力された場合に使用される値でもあります。value を指定しない場合、スクリプトのダイアログ ボックスを開いたときに、パラメータ値は空になります。
環境からのデフォルト値の設定
defaultEnvironmentName プロパティを環境設定の名前に設定すると、パラメータのデフォルト値を環境設定の値に設定できます。環境設定を選択した場合、value プロパティは無視されます。
def getParameterInfo(self):
param0 = arcpy.Parameter(
displayName="Input Workspace",
name="in_workspace",
datatype="DEWorkspace",
parameterType="Required",
direction="Input")
# In the tool's dialog box, the first parameter will show
# the workspace environment's value (if set)
param0.defaultEnvironmentName = "workspace"
パラメータ スキーマの定義
タイプがフィーチャクラス、テーブル、ラスタ、ワークスペースのすべての出力パラメータは、schema オブジェクトを持ちます。フィーチャクラス、テーブル、ラスタ、ワークスペースの出力だけがスキーマを持ちます。他のタイプはスキーマを持ちません。schema オブジェクトは、ジオプロセシングによって作成されます。このスキーマには、パラメータ オブジェクトを通してアクセスし、ツールの出力を記述するためのルールを設定します。スキーマ ルールを設定した後、ジオプロセシングの内部整合チェック コードによって設定したルールが検証され、出力の説明が更新されます。
スキーマの操作の詳細については、「スキーマ」をご参照ください。
入力パラメータのデータタイプが Feature Set または Record Set の場合、入力するフィーチャの fieldsRule と geometryType を指定する必要があります。
フィーチャ セットとレコード セットについて
[フィーチャ セット] と [レコード セット] データ タイプでは、データを対話的に入力できます。[フィーチャ セット] を使用すると、スクリプトのユーザは、マップをクリックすることで ArcMap 内にフィーチャを対話的に作成できます。[レコード セット] を使用すると、ユーザは単純なテーブル グリッド内に行を対話的に作成できます。
Feature Set と Record Set コントロールのシンボルとスキーマ(属性とジオメトリ タイプ)を設定するには、パラメータの value プロパティをフィーチャクラス、テーブル、またはレイヤ ファイル(*.lyr)に設定します。
def getParameterInfo(self):
param0 = arcpy.Parameter(
displayName="Input Feature Set",
name="in_feature_set",
datatype="GPFeatureRecordSetLayer",
parameterType="Required",
direction="Input")
# Use __file__ attribute to find the .lyr file (assuming the
# .pyt and .lyr files exist in the same folder)
param0.value = os.path.join(os.path.dirname(__file__),
"Fire_Station.lyr")
フィーチャ セットとレコード セットの詳細については、以下のリンクをご覧ください。
トピック |
説明 |
---|---|
Python の FeatureSet および RecordSet の使用法について説明しています。 |
|
フィーチャ セットとレコード セットのコントロールの使用法を説明しています。 |
パラメータへのフィルタの適用
パラメータにフィルタを適用すると、パラメータの選択肢を絞ることができます。たとえば、選択肢をテキスト フィールドだけに制限するフィールド フィルタを設定できます。
ジオプロセシングは、文字列、long、double、フィーチャクラス、ファイル、フィールド、ワークスペースのタイプのパラメータに対して、フィルタを自動的に作成します。パラメータでフィルタを設定していない場合でも、パラメータには空のフィルタが関連付けられています。空のフィルタは、フィルタがない場合と同じです。空のフィルタに値を追加することで、フィルタを有効化して、ユーザの選択肢をフィルタの内容に制限することができます。
- フィルタは、ユーザに対してデータの参照時に有効な選択肢だけを提供します。ポイント フィーチャクラスにフィルタを設定する場合、ユーザがデータを参照するときに、ポイント フィーチャクラスだけが表示されます。テキスト フィールドにフィルタを設定する場合、フィールドのドロップダウン リストにはテキスト フィールドだけが表示されます。
- ユーザが(リストやファイル ブラウザから値を選択するのではなく)パラメータ値を入力する場合、その値がフィルタに対してチェックされます。ユーザが不正な値(テキスト フィールドではなく数値フィールドなど)を入力した場合、警告またはエラーが自動的に設定されます。
パラメータに特定の値またはデータセット タイプだけを入力する場合、フィルタを指定できます。フィルタの type を適切な値に設定します。フィルタは 6 つの種類があります。選択できるフィルタのタイプは、パラメータのデータ タイプによって変わります。
フィルタのタイプ |
値 |
---|---|
Value List |
文字列または数値のリスト。パラメータのデータ タイプが String、Long、Double、Boolean の場合に使用されます。 |
Range |
最小値と最大値。Long および Double のデータ タイプの場合に使用されます。 |
Feature Class |
使用できるフィーチャクラスのリスト。これには、ポイント、マルチポイント、ポリライン、ポリゴン、マルチパッチ、球体、アノテーション、ディメンションが含まれます。複数の値をフィルタに設定できます。 |
File |
ファイルの接尾辞のリスト。例: txt; e00; ditamap |
Field |
使用できるフィールド タイプのリスト。これには、Short、Long、Single、Double、Text、Date、OID、Geometry、BLOB、Raster、GUID、GlobalID、および XML が含まれます。複数の値をフィルタに設定できます。 |
Workspace |
使用できるワークスペース タイプのリスト。これには、File System、Local Database、Remote Database があります。1 つまたは複数の値を設定できます。 |
プロパティ |
説明 |
---|---|
type |
フィルタのタイプ(ValueList、Range、FeatureClass、File、Field、Workspace)。Long および Double のパラメータを扱うときに、フィルタのタイプを設定できます(以下の注意をご参照ください)。その他のタイプのパラメータの場合、フィルタの有効なタイプは 1 つだけなので、これらのパラメータのタイプの設定は無視されます。値をフィルタしない場合は、リスト プロパティを空のリストに設定します。 |
list |
フィルタの値の Python リスト。値をフィルタしない場合は、リスト プロパティを空のリストに設定します。 |
通常、選択できるフィルタのタイプは 1 つだけです。Long と Double だけは、Value List と Range の 2 つを選択できます。
Value List
値のリスト フィルタは、キーワードのセットを提供するときに便利です。多くのツールには、あらかじめ定義されたキーワードのセットがあります。たとえば、[フィールドの追加(Add Field)] ツールの [フィールド タイプ] パラメータや、[オーバーレイ] ツールセットに含まれる多くのツールの [結合する属性] パラメータなどです。
Long および Double のデータ タイプで、値のリスト フィルタを使用できます。これらのタイプでは設定可能な数値を入力します。
def getParameterInfo(self):
param0 = arcpy.Parameter(
displayName="Input value",
name="in_value",
datatype="GPLong",
parameterType="Required",
direction="Input")
# Set a value list of 1, 10 and 100
param0.filter.type = "ValueList"
param0.filter.list = [1, 10, 100]
複数の値を選択できるようにするには、multiValue プロパティを True に設定します。
Boolean データ タイプでも値のリストを使用できます。Boolean データ タイプでは、値のリストに true 値と false 値の 2 つの値が含まれます。true 値が常にリストの 1 番目の値になります。これらの値は、コマンド ラインで値を指定するために使用されます。たとえば、[フィールドの追加(Add Field)] の IsNullable プロパティで使用される NULLABLE と NON_NULLABLE のキーワードをご参照ください。
Range
Long または Double パラメータは、範囲フィルタを持つことができます。範囲フィルタでは、最小値と最大値の 2 つの値を使用します。リストの 1 番目の値が最小値です。最小値と最大値はどちらも範囲に含まれます。
def getParameterInfo(self):
param0 = arcpy.Parameter(
displayName="Input range",
name="in_range",
datatype="GPLong",
parameterType="Required",
direction="Input")
# Set an acceptable range of 1 to 10
param0.filter.type = "Range"
param0.filter.list = [1, 10]
Feature Class
このフィルタでは、1 つ以上のフィルタ値を選択します。入力フィーチャクラスが、フィルタの値に対してチェックされます。たとえば、フィルタの値にポイントだけを選択した場合は、パラメータの値としてポイント フィーチャクラスしか入力できません。
def getParameterInfo(self):
param0 = arcpy.Parameter(
displayName="Input Features",
name="in_features",
datatype="GPFeatureLayer",
parameterType="Required",
direction="Input")
param0.filter.list = ["Polygon"]
File
ファイル フィルタには、「txt」(簡単なテキスト ファイル)や「csv」(カンマ区切りファイル)などの、使用できるファイル接尾辞のリストが含まれます。接尾辞には任意のテキストを使用できます。ArcGIS で認識される接尾辞である必要はありません。接尾辞の長さは任意で、ドットは含めません。
def getParameterInfo(self):
param0 = arcpy.Parameter(
displayName="Input File",
name="in_file",
datatype="DEFile",
parameterType="Required",
direction="Input")
# To define a file filter that includes .csv and .txt extensions,
# set the filter list to a list of file extension names
param0.filter.list = ['txt', 'csv']
Field
フィールド フィルタは、使用できるフィールド タイプを定義します。Short、Long、Float、Single、Double、Text、Date、OID、Geometry、Blob、Raster、GUID、GlobalID、XML。複数の値をフィルタに設定できます。
def getParameterInfo(self):
param0 = arcpy.Parameter(
displayName="Input Features",
name="in_features",
datatype="GPFeatureLayer",
parameterType="Required",
direction="Input")
param1 = arcpy.Parameter(
displayName="Field",
name="field",
datatype="Field",
parameterType="Required",
direction="Input")
# Set the filter to accept only fields that are Short or Long type
param1.filter.list = ['Short', 'Long']
param1.parameterDependencies = [param0.name]
Workspace
ワークスペース フィルタは、使用できる入力ワークスペースのタイプを指定します。これには 3 つの値があります。
ワークスペース フィルタ | 説明 |
---|---|
ファイル システム | シェープファイル、カバレッジ、INFO テーブル、およびグリッドを格納するためのシステム フォルダ |
ローカル データベース | パーソナルまたはファイル ジオデータベース |
リモート データベース | ArcSDE データベース接続 |
def getParameterInfo(self):
param0 = arcpy.Parameter(
displayName="Input Workspace",
name="in_workspace",
datatype="DEWorkspace",
parameterType="Required",
direction="Input")
# Set the filter to accept only local (personal or file) geodatabases
param0.filter.list = ["Local Database"]
parameterDependencies
parameterDependencies プロパティには 2 つの目的があります。
- 派生出力パラメータの場合、parameterDependencies は、ツールによって変更される入力パラメータに設定されます。
- 入力パラメータの場合、parameterDependencies には、データ タイプに使用されるその他のパラメータの名前が含まれます。
# Third parameter
param2 = arcpy.Parameter(
displayName="Output Features",
name="out_features",
datatype="GPFeatureLayer",
parameterType="Derived",
direction="Output")
param2.parameterDependencies = [param0.name]
param2.schema.clone = True
次の表のように、parameterDependencies は特定の入力パラメータに対してのみ設定できます。
入力データ タイプ |
従属パラメータのデータ タイプ |
説明 |
---|---|---|
フィールドまたは SQL 文 |
Table |
そのフィールドを持つテーブル |
INFO アイテムまたは INFO 条件式 |
INFO Table |
そのアイテムを持つ INFO テーブル |
Coverage Feature Class |
Coverage |
フィーチャを含むカバレッジ |
面積単位または距離単位 |
ジオデータセット |
デフォルト単位の決定に使用される地理データセット |
座標系 |
Workspace |
デフォルトの座標系の決定に使用されるワークスペース |
Network Analyst Hierarchy Settings |
Network Dataset |
階層情報を持つネットワーク データセット。 |
Geostatistical Value Table |
Geostatistical Layer |
テーブルを含む解析レイヤ |
symbology
ツールの出力がフィーチャ セット、ラスタ、TIN、または Network Analyst レイヤの場合、symbology プロパティにレイヤ ファイル(*.lyr)の場所を指定できます。ツールを ArcMap、ArcGlobe、ArcScene から実行していて、[ジオプロセシング処理結果をマップに追加] が有効な場合、出力は表示に追加され、シンボル レイヤ ファイルに定義されたシンボルを使用して描画されます。
def getParameterInfo(self):
param0 = arcpy.Parameter(
displayName="Input Raster",
name="in_raster",
datatype="DERasterDataset",
parameterType="Required",
direction="Input")
param1 = arcpy.Parameter(
displayName="Output Raster",
name="out_raster",
datatype="DERasterDataset",
parameterType="Required",
direction="Output")
# Use __file__ attribute to find the .lyr file (assuming the
# .pyt and .lyr files exist in the same folder).
param1.symbology = os.path.join(os.path.dirname(__file__),
'raster_symbology.lyr')
レイヤ ファイルは、ツールを実行するたびに読み込まれます。レイヤ ファイルが(移動または削除されたために)見つからない場合、デフォルトのシンボルが使用されます。
category
ツール ダイアログ ボックスのサイズを最小限に抑えるために、パラメータをさまざまなカテゴリに配置できます。Network Analyst ツールは、次のようにカテゴリを使用しています。同じカテゴリ文字列を持つパラメータはグループ化されます。
カテゴリは、必ず未分類パラメータの後ろに表示されます。必須パラメータはカテゴリ内に配置しないでください。ツール ダイアログ ボックスに表示されなくなります。