ほぼすべてのツールにはパラメーターがあり、その値はツール ダイアログ ボックスまたはスクリプト内で設定します。ツールを実行すると、パラメーター値がツールのソース コードに送られます。ツールはその値を読み込んで、処理を続けます。
パラメーターの詳細については、「スクリプト ツールのパラメーターの概要」をご参照ください。
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 種類あります。
- チェックボックスのリストは、フィールドに使用されるだけでなく、ValueList フィルターが含まれる場合には文字列、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 プロパティを設定してパラメーターのデータ タイプと列見出しを定義します。次の例では、バリュー テーブル パラメーターは、フィールド名と統計の種類の文字列値 (GPString) を受け入れる 2 つの列を持つように定義されています。ValueList フィルターと値のリストを使用することで、対応する GPValueTable 列にドロップダウン リストを生成できます。バリュー テーブル パラメーターにデフォルト値を設定するには、values プロパティを使用し、値のリストにパラメーター値を指定します。
def getParameterInfo(self):
param0 = arcpy.Parameter(
displayName ='Input Features',
name ='in_features',
datatype ="GPFeatureLayer",
parameterType ='Required',
direction ='Input')
param1 = arcpy.Parameter(
displayName='Statistics Field(s)',
name='stat_fields',
datatype='GPValueTable',
parameterType='Required',
direction='Input')
param1.parameterDependencies = [param0.name]
param1.columns = [['Field', 'Field'], ['String', 'Statistic Type']]
param1.filters[1].type = 'ValueList'
param1.values = [['NAME', 'SUM']]
param1.filters[1].list = ['SUM', 'MIN', 'MAX', 'STDEV', 'MEAN']
パラメーターのデフォルト値の設定
パラメーターのデフォルト値を設定するには、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")
フィーチャ セットとレコード セットの詳細については、以下のリンクをご覧ください。
トピック | 説明 |
---|---|
FeatureSet および RecordSet オブジェクトを Python で使用する方法について説明しています。 | |
フィーチャ セットとレコード セットのコントロールの使用法を説明しています。 |
パラメーターへのフィルターの適用
パラメーターにフィルターを適用すると、パラメーターの選択肢を絞ることができます。たとえば、選択肢をテキスト フィールドだけに制限するフィールド フィルターを設定できます。
ジオプロセシングは、文字列、long、double、フィーチャクラス、ファイル、フィールド、ワークスペースのタイプのパラメーターに対して、フィルターを自動的に作成します。パラメーターでフィルターを設定していない場合でも、パラメーターには空のフィルターが関連付けられています。空のフィルターは、フィルターがない場合と同じです。空のフィルターに値を追加することで、フィルターを有効化して、ユーザーの選択肢をフィルターの内容に制限することができます。
- フィルターは、ユーザーに対してデータの参照時に有効な選択肢だけを提供します。ポイント フィーチャクラスにフィルターを設定する場合、ユーザーがデータを参照するときに、ポイント フィーチャクラスだけが表示されます。テキスト フィールドにフィルターを設定する場合、フィールドのドロップダウン リストにはテキスト フィールドだけが表示されます。
- ユーザーが (リストやファイル ブラウザーから値を選択するのではなく) パラメーター値を入力する場合、その値がフィルターに対してチェックされます。ユーザーが不正な値 (テキスト フィールドではなく数値フィールドなど) を入力した場合、警告またはエラーが自動的に設定されます。
パラメーターに特定の値またはデータセット タイプだけを入力する場合、フィルターを指定できます。filtertype を適切な値に設定します。フィルターは 6 つの種類があります。選択できるフィルターのタイプは、パラメーターのデータ タイプによって変わります。
フィルターのタイプ | 値 |
---|---|
値のリスト | 文字列または数値のリスト。パラメーターのデータ タイプが String、Long、Double、Boolean の場合に使用されます。 |
範囲 | 最小値と最大値。Long および Double のデータ タイプの場合に使用されます。 |
フィーチャクラス | 使用できるフィーチャクラスのリスト。これには、ポイント、マルチポイント、ポリライン、ポリゴン、マルチパッチ、球体、アノテーション、およびディメンションが含まれます。複数の値をフィルターに設定できます。 |
ファイル | 接尾辞のリスト (['zip', 'xml'] など)。 |
フィールド | 使用できるフィールド タイプのリスト。これには、Short、Long、Single、Double、Text、Date、OID、Geometry、BLOB、Raster、GUID、GlobalID、および XML が含まれます。複数の値をフィルターに設定できます。 |
ワークスペース | 使用できるワークスペース タイプのリスト。これには、ファイル システム、ローカル データベース、またはリモート データベースがあります。1 つまたは複数の値を設定できます。 |
プロパティ | 説明 |
---|---|
type | フィルターのタイプ (ValueList、Range、FeatureClass、File、Field、Workspace)。Long および Double のパラメーターを扱うときに、フィルターのタイプを設定できます (以下の注意をご参照ください)。その他のタイプのパラメーターの場合、フィルターの有効なタイプは 1 つだけなので、これらのパラメーターのタイプの設定は無視されます。値をフィルターしない場合は、リスト プロパティを空のリストに設定します。 |
list | フィルターの値の Python リスト。値をフィルターしない場合は、リスト プロパティを空のリストに設定します。 |
通常、選択できるフィルターのタイプは 1 つだけです。Long と Double の場合にのみ、値のリストと範囲の 2 つを選択できます。
値のリスト
値のリスト フィルターは、キーワードのセットを提供するときに便利です。多くのツールには、あらかじめ定義されたキーワードのセットがあります。たとえば、[フィールドの追加 (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)] と、Field IsNullable パラメーターで使用される NULLABLE および NON_NULLABLE キーワードをご参照ください。
範囲
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]
フィーチャクラス
このフィルターでは、1 つ以上のフィルター値を選択します。入力フィーチャクラスが、フィルターの値に対してチェックされます。たとえば、フィルターの値にポイントだけを選択した場合は、パラメーターの値としてポイント フィーチャクラスしか入力できません。
def getParameterInfo(self):
param0 = arcpy.Parameter(
displayName="Input Features",
name="in_features",
datatype="GPFeatureLayer",
parameterType="Required",
direction="Input")
param0.filter.list = ["Polygon"]
ファイル
ファイル filter には、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']
フィールド
フィールド フィルターは、使用できるフィールド タイプを定義します。使用できるフィールド タイプには、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]
ワークスペース
ワークスペース フィルターには、使用できる入力ワークスペースのタイプを指定します。これには 3 つの値があります。
ワークスペース フィルター | 説明 |
---|---|
ファイル システム | シェープファイル、カバレッジ、INFO テーブル、およびグリッドを格納するためのシステム フォルダー |
ローカル データベース | ジオデータベース |
リモート データベース | エンタープライズ データベース |
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 文 | テーブル | そのフィールドを持つテーブル |
INFO アイテムまたは INFO 条件式 | INFO Table | そのアイテムを持つ INFO テーブル |
Coverage Feature Class | カバレッジ | フィーチャを含むカバレッジ |
面積単位または距離単位 | ジオデータセット | デフォルト単位の決定に使用される地理データセット |
座標系 | ワークスペース | デフォルトの座標系の決定に使用されるワークスペース |
Network Analyst 階層設定 | ネットワーク データセット | 階層情報を持つネットワーク データセット。 |
Long 整数型 | geostatistical レイヤー | Geostatistical Analyst ツールで使用されるデータセットとフィールドのテーブル |
symbology
ツールの出力がフィーチャ セット、ラスター、TIN、または Network Analyst レイヤーの場合は、レイヤー ファイル (*.lyr) の場所を symbology プロパティで指定できます。ツールを 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 ツールは、次のようにカテゴリを使用しています。同じカテゴリ文字列を持つパラメーターはグループ化されます。
カテゴリは、必ず未分類パラメーターの後ろに表示されます。必須パラメーターはカテゴリ内に配置しないでください。ツール ダイアログ ボックスに表示されなくなります。