Python ツールボックスでのパラメータの定義

ほぼすべてのツールにはパラメータがあり、そのパラメータ値はツール ダイアログ ボックスまたはスクリプト内で設定します。ツールを実行すると、パラメータ値がツールのソース コードに送られます。ツールはその値を読み込んで、処理を続けます。

パラメータの詳細については、「スクリプト ツールのパラメータの概要」をご参照ください。

Python ツールボックス(*.pyt)のツール パラメータは、ツール クラスの getParameterInfo メソッドで、Parameter オブジェクトを作成し、そのプロパティを設定することで定義します。

Parameter オブジェクトには多くの読み書きプロパティがありますが、すべてのパラメータに対して設定する必要のあるプロパティは次のとおりです。

プロパティ

説明

displayName

このツールのダイアログ ボックスで表示されるパラメータ名。

name

Python のツールの構文内に表示されるパラメータ名。

datatype

Python ツールボックスのすべてのツール パラメータには、それぞれ対応するデータ タイプがあります。ジオプロセシングでスクリプト ツールのダイアログ ボックスを開くと、パラメータ値がデータ タイプと照合してチェックされます。

データを参照する際にもデータ タイプが使用され、パラメータ データ タイプと一致するデータだけが参照ダイアログ ボックスに表示されるようになっています。

パラメータのデータ タイプのリストについては、「Python ツールボックスにあるパラメータのデータ タイプの定義」をご参照ください。

多くのデータ タイプが使用できますが、最も一般的に使用されるデータ タイプは、String、Double、Boolean、Feature Layer、Raster Dataset などです。

parameterType

parameterType には 3 つの選択肢があります。

  • Required - 値を指定しないと、ツールを実行できません。
  • Optional - パラメータに値を指定しなくてもかまいません。
  • Derived - パラメータは出力パラメータ専用です(下の「direction」をご参照ください)。派生出力パラメータは、ツール ダイアログ ボックスに表示されません。

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 つの用途があります。

複数値パラメータの作成

パラメータで単一値ではなく、値のリストを処理できるようにする場合、multiValue プロパティを True に設定します。

ツール ダイアログ ボックスには、複数値で使用するユーザ インタフェース コントロールが、次のように 2 種類あります。

両方の種類の複数値コントロールは、次のとおりです。

複数値コントロール

上図では、ユーザがすべての道路タイプを選択した場合、パラメータ値は ["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)] ツールでは [統計フィールド] パラメータに複数のフィールドを含めることができます。

複数値パラメータ コントロールの説明図

バリュー テーブル パラメータを定義するには、datatypeGPValueTable に設定し、columns プロパティを設定してパラメータのデータ タイプと列見出しを定義します。次の例では、バリュー テーブル パラメータは、フィーチャ レイヤと整数値(GPLong)を受け入れる 2 つの列を持つように定義されています。

def getParameterInfo(self):
    param0 = arcpy.Parameter(
        displayName='Input Features',
        name='in_features',
        datatype='GPValueTable',
        parameterType='Required',
        direction='Input')

    param0.columns = [['Feature Layer', 'Features'], ['Long', '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 の場合、入力するフィーチャの fieldsRulegeometryType を指定する必要があります。

フィーチャ セットとレコード セットについて

[フィーチャ セット] と [レコード セット] データ タイプでは、データを対話的に入力できます。[フィーチャ セット] を使用すると、スクリプトのユーザは、マップをクリックすることで 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 つの種類があります。選択できるフィルタのタイプは、パラメータのデータ タイプによって変わります。

フィルタのタイプ

値のリスト

文字列または数値のリスト。パラメータのデータ タイプが String、Long、Double、Boolean の場合に使用されます。

範囲

最小値と最大値。Long および Double のデータ タイプの場合に使用されます。

フィーチャクラス

使用できるフィーチャクラスのリスト。これには、ポイント、マルチポイント、ポリライン、ポリゴン、マルチパッチ、球体、アノテーション、ディメンションが含まれます。複数の値をフィルタに設定できます。

ファイル

ファイルの接尾辞のリスト。例: txt; e00; ditamap

フィールド

使用できるフィールド タイプのリスト。これには、Short、Long、Single、Double、Text、Date、OID、Geometry、BLOB、Raster、GUID、GlobalID、および XML が含まれます。複数の値をフィルタに設定できます。

ワークスペース

使用できるワークスペース タイプのリスト。これには、File System、Local Database、Remote Database があります。1 つまたは複数の値を設定できます。

フィルタのタイプと値

プロパティ

説明

type

フィルタのタイプ(ValueList、Range、FeatureClass、File、Field、Workspace)。Long および Double のパラメータを扱うときに、フィルタのタイプを設定できます(以下の注意をご参照ください)。その他のタイプのパラメータの場合、フィルタの有効なタイプは 1 つだけなので、これらのパラメータのタイプの設定は無視されます。値をフィルタしない場合は、リスト プロパティを空のリストに設定します。

list

フィルタの値の Python リスト。値をフィルタしない場合は、リスト プロパティを空のリストに設定します。

filter のプロパティ

通常、選択できるフィルタのタイプは 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

フィールド フィルタは、使用できるフィールド タイプを定義します。ShortLongFloatSingleDoubleTextDateOIDGeometryBlobRasterGUIDGlobalIDXML。複数の値をフィルタに設定できます。

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 つの目的があります。

# 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 文

テーブル

そのフィールドを持つテーブル

INFO アイテムまたは INFO 条件式

INFO テーブル

そのアイテムを持つ INFO テーブル

カバレッジ フィーチャクラス

カバレッジ

フィーチャを含むカバレッジ

面積単位または距離単位

ジオデータセット

デフォルト単位の決定に使用される地理データセット

座標系

ワークスペース

デフォルトの座標系の決定に使用されるワークスペース

Network Analyst 階層設定

ネットワーク データセット

階層情報を持つネットワーク データセット。

Geostatistical 値テーブル

Geostatistical レイヤ

テーブルを含む解析レイヤ

parameterDependencies のデータ タイプ

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 ツールは、次のようにカテゴリを使用しています。同じカテゴリ文字列を持つパラメータはグループ化されます。

パラメータのカテゴリ

カテゴリは、必ず未分類パラメータの後ろに表示されます。必須パラメータはカテゴリ内に配置しないでください。ツール ダイアログ ボックスに表示されなくなります。

関連トピック

5/10/2014