スクリプト ツール パラメータの設定
ほぼすべてのツールにはパラメータがあり、そのパラメータ値はツール ダイアログ ボックスまたはスクリプト内で設定します。ツールを実行すると、パラメータ値がツールのソース コードに送られます。ツールはその値を読み込んで、処理を続けます。
パラメータの詳細については、「スクリプト ツールのパラメータの概要」をご参照ください。
スクリプト ツール パラメータは、[スクリプトの追加] ウィザードを使用しているときに設定できます。また、ツールの [プロパティ] ダイアログ ボックスから、スクリプト ツール パラメータを追加、削除、変更することもできます。スクリプト ツールのプロパティにアクセスするには、ツールを右クリックして、[プロパティ] → [パラメータ] タブの順にクリックします。
[スクリプトの追加] ウィザードまたは [プロパティ] ダイアログ ボックスのどちらでパラメータを設定する場合でも、手順(ここで説明します)は同じです。
新しいパラメータを追加するには、[表示名] 列の最初の空のセルをクリックして、パラメータの名前を入力します。これは、ツール ダイアログ ボックスに表示される名前です。名前には、スペースを入れることができます。Python の構文では、パラメータ名はスペースをアンダースコア(_)に置き換えた表示名になります。
パラメータの表示名を入力したら、次のように [データ タイプ] セルをクリックして、パラメータのデータ タイプを選択します。
次のように、各パラメータには設定可能な追加プロパティがあります。
プロパティ |
説明 |
---|---|
[Required]、[Optional]、[Derived] のいずれかを指定できます。[Derived] とは、ツールのユーザはパラメータの値を入力しないことを意味しています。[Derived] タイプは必ず出力パラメータになります。 |
|
[Input] または [Output] のいずれかを指定できます。パラメータの [タイプ] が [Derived] の場合、[方向] は必ず [Output] になります。 |
|
値のリストにする場合は [Yes] になります。単一値の場合は [No] になります。 |
|
パラメータのデフォルト値です。パラメータのデータ タイプがフィーチャ セットまたはレコード セットの場合、[デフォルト] は [スキーマ] に置き換えられます。 |
|
パラメータのデフォルト値が環境設定から取得される場合、このプロパティには、環境設定の名前が含まれます。 |
|
パラメータに特定のデータセットまたは値だけを入力する場合、フィルタを指定できます。フィルタは 6 つの種類があります。選択できるフィルタのタイプは、パラメータのデータ タイプによって変わります。 |
|
このプロパティは、派生出力パラメータと入力パラメータのデータ タイプに適用されます。派生出力パラメータの場合、[取得元] は、出力の定義を含むパラメータに設定できます。入力パラメータの場合、[取得元] は、入力に必要な情報を含むパラメータに設定されます。 |
|
このプロパティは、出力パラメータだけに適用されます。値は、出力を表示するためのシンボルを含むレイヤ ファイル(*.lyr)の場所です。 |
タイプ
タイプには 3 つの選択肢があります。
- [Required] パラメータでは、ユーザが値を入力する必要があります。ツールは、ユーザが値を入力するまで実行できません。
- [Optional] パラメータでは、ユーザが値を入力する必要はありません。
- [Derived] パラメータは、出力パラメータ専用です(後述の「方向」をご参照ください)。派生出力パラメータは、ツール ダイアログ ボックスに表示されません。
派生出力パラメータには、次の 5 つの用途があります。
- 出力が入力と同じ場合([フィールド演算(Calculate Field)] など)。[フィールド演算(Calculate Field)] は、入力テーブルの特定フィールドの値を変更します。これは、新しいテーブルを作成したり、入力のスキーマを変更したりはしません。[編集] ツールボックスには、出力が入力と同じその他のツールがあります。
- ツールが入力のスキーマを変更する場合([フィールドの追加(Add Field)] など)。[フィールドの追加(Add Field)] は、フィールドを入力テーブルに追加します。これは、新しい出力テーブルは作成しません。
- ツールが他のパラメータの情報を使って出力を作成する場合([フィーチャクラスの作成(Create Feature Class)] ツールなど)。[フィーチャクラスの作成(Create Feature Class)] ツールでは、ワークスペースと新しいフィーチャクラスの名前を指定して、フィーチャクラスを作成します。
- ツールがデータセットに対してスカラー値を出力する場合。たとえば、[行のカウント(Get Count)] は、long integer(レコードの数)を出力します。ツールがスカラー値を出力する場合、出力は必ず [Derived] になります。
- ツールが既知の場所にデータを作成する場合。たとえば、既知のワークスペース内にある既存のテーブルを更新するスクリプトなどが挙げられます。ユーザは、ダイアログ ボックスまたはスクリプト内で、このテーブルを指定する必要はありません。
スクリプト ツールが派生出力を持つ場合、SetParameterAsText() 関数を使って、スクリプト内の派生出力パラメータの値を設定する必要があります。
すべてのツールには出力が必要です
すべてのスクリプト ツールは、ModelBuilder で使用できるように、出力パラメータを持つ必要があります。ModelBuilder の基本概念は、ツールの出力を他のツールの入力と接続することです。スクリプト ツールが出力パラメータを持たないと、そのツールは ModelBuilder であまり役に立たなくなってしまいます。少なくとも、ツールが正常に終了した場合は true、それ以外の場合は false のブール型を出力させることができます。
入力パラメータを変更する派生出力
次の図は、ModelBuilder 内で使用される、[フィールド値の更新(Update Field Values)] という架空のスクリプト ツールを示したものです(説明のため、[フィールド値の更新(Update Field Values)] は、組織が既知のテキスト フィールド群の内容を調べて、スペルミスや大文字と小文字のエラーを修正するために使用するものとします)。[フィールド値の更新(Update Field Values)] は、新しいフィーチャクラスを作成しませんが、入力フィーチャクラスのフィールド値を更新します。
次の図は、[フィールド値の更新(Update Field Values)] の正しいパラメータ定義です。[フィールド値の更新(Update Field Values)] には、[タイプ] が [Derived] に設定された出力フィーチャクラス パラメータがあります。このツールは出力が入力と同じであるため、[取得元] には入力パラメータが設定されています(([取得元] はパラメータの名前を使用するため、表示名のスペースがアンダースコアに置き換えられています)。
入力パラメータを変更しない派生出力
次の図は、別のツールを示したものです。このツールは、出力が派生ですが、取得元は入力パラメータではありません([取得元] が空白になっています)。このシナリオでは、[データのリポジトリへの転送(Post Data to Repository)] という架空のツールが、入力フィーチャクラスを既知のワークスペース(リポジトリ)にコピーしてから、日付/時間フィールドを追加および入力しています。
出力値の設定
上のモデルでは、[フィーチャのコピー(Copy Features)] ツールは空(黄色ではなく白)であることに注意してください。これは、[出力フィーチャ] 変数が、緑色であるにもかかわらず、値を持っていないためです。出力フィーチャの名前と場所は、ツールを実行するまでわかりません。この場合、ArcPy 関数の SetParameterAsText() を使用して、スクリプトで出力値を指定する必要があります。SetParameterAsText() 関数は、テキスト文字列または値テーブルなどのオブジェクトのいずれかを使用して、出力パラメータの値を設定します。
ツールの整合チェック コードを作成することで、ツールを実行する前に出力の値を設定することができます。
次のコード例では、上記の [データのリポジトリへの転送(Post Data to Repository)] スクリプトの処理に基づき、SetParameterAsText() を使用しています。
# Post data to Repository - copies the input features to the
# current repository, adding and populating a date
# field
#
# Import system modules and arcpy
#
import sys
import string
import os
import arcpy
# Get the value of the input parameter
#
inFC = arcpy.GetParameterAsText(0)
# Create the pathname to the output feature class.
# 1) get the name of the feature class
# 2) remove any file extension, such as ".shp"
# (we're copying to a geodatabase which doesn't
# allow file extensions, like .shp)
#
fcName = os.path.basename(inFC)
fcName = os.path.splitext(fcName)[0]
repository = "e:/repository/featuredata.gdb"
outFC = os.path.join(repository, fcName)
# Copy the input to the output, add the date field
#
arcpy.CopyFeatures_management(inFC, outFC)
arcpy.AddField_management(outFC, "PostDate", "DATE")
# Create a locale-specific string containing the current date
# and time, then calculate it into the PostDate field, adding
# the required quotes around the postTime string.
#
import time
postTime = time.strftime("%x %X")
arcpy.AddMessage(postTime)
qPostTime = "\"" + postTime + "\""
arcpy.CalculateField_management(outFC, "PostDate", qPostTime)
# Set output parameter
#
arcpy.SetParameterAsText(1, outFC)
データ以外の出力値
上の例は、派生データセットの出力を示しています。しかし、一部のツールはデータセット以外の値を出力します。たとえば、[行のカウント(Get Count)] ツールは、テーブル内の行数を含む Long データ タイプを出力します。データセット以外の値を出力することは、よくあります。関連する複数のデータセットを解析して、一連の数値や正常/失敗のブール値だけを出力するスクリプトなどを独自に作成できます。
値のデータ タイプ(Long や Boolean など)を含む出力パラメータは、必ず [Required] ではなく [Derived] になります。
方向
このプロパティは、パラメータがツールへの入力とツールの出力のどちらであるかを定義します。
パラメータの [タイプ] が [Derived] の場合、パラメータの [方向] は自動的に [Output] に設定されます。
複数値
パラメータで単一値ではなく、値のリストを処理できるようにする場合、[複数値] プロパティを [Yes] に設定します。
ツール ダイアログ ボックスには、複数値で使用するユーザ インタフェース コントロールが、次のように 2 種類あります。
- チェックボックスのリストは、フィールドと、値のリスト フィルタが含まれる場合は文字列、Long、Double に使用されます。
- その他すべてのデータ タイプには、複数値パラメータ コントロールが表示されます。
両方の種類の複数値コントロールは、次のとおりです。
複数値は、セミコロンで区切られた文字列として、スクリプトに渡されます。上の図ですべての道路タイプを選択した場合、パラメータ値は Interstates;Primary roads;Secondary roads となります。区切られた文字列を分割するには、次のコード例のように Python の split() メソッドを使用します。
roadTypes = arcpy.GetParameterAsText(0)
roadTypeList = roadTypes.split(";")
# Process each road type
#
for rType in roadTypeList:
# rType contains an individual road type string (ex: "Interstates")
#
arcpy.AddMessage("Processing: " + rType)
デフォルト
デフォルト値は、スクリプトのツール ダイアログ ボックスが開いたときのパラメータの内容になります。また、スクリプト内のパラメータに # が入力された場合に使用される値でもあります。[デフォルト] プロパティに値を指定しない場合、スクリプトのダイアログ ボックスが開いたときのパラメータ値は空白になります。このプロパティに値を指定した場合、[環境] プロパティは無効になります。[環境] プロパティを有効化するには、[デフォルト] プロパティを消去します。
スキーマ
入力パラメータのデータ タイプが [フィーチャ セット] または [レコード セット] の場合、入力するフィーチャのフィールドとジオメトリ タイプを定義しているスキーマの場所を指定する必要があります。スキーマは、フィーチャクラス、テーブル、またはレイヤ ファイル(*.lyr)のいずれかです。
フィーチャ セットとレコード セットについて
[フィーチャ セット] と [レコード セット] データ タイプでは、データを対話的に入力できます。[フィーチャ セット] を使用すると、スクリプトのユーザは、マップをクリックすることで ArcMap 内にフィーチャを対話的に作成できます。[レコード セット] を使用すると、ユーザは単純なテーブル グリッド内に行を対話的に作成できます。
フィーチャ セットとレコード セットの詳細については、以下のリンクをご覧ください。
トピック |
説明 |
---|---|
Python の FeatureSet および RecordSet の使用法について説明しています。 |
|
フィーチャ セットとレコード セットのコントロールの使用法を説明しています。 |
環境
[環境] の横のセルを右クリックして、環境設定の名前を選択すると、環境設定の値にパラメータのデフォルト値を設定できます。環境設定を選択した場合、[デフォルト] プロパティは無視されます。[デフォルト] プロパティを [環境] プロパティの代わりに使用するには、ドロップダウン リストから空白のエントリを選択して、[環境] プロパティ消去します。
フィルタ
パラメータに特定の値またはデータセット タイプだけを入力する場合、フィルタを指定できます。[フィルタ] の横のセルをクリックして、ドロップダウン リストから適切なフィルタを選択します。ダイアログ ボックスが開いたら、フィルタの値を指定します。フィルタは 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 つまたは複数の値を設定できます。 |
通常、選択できるフィルタのタイプは 1 つだけです。Long と Double だけは、値のリストと範囲の 2 つを選択できます。
スクリプト ツールの ToolValidator クラスをカスタマイズすることで、Python によってプログラムでフィルタを設定することもできます。
値のリスト
値のリスト フィルタは、キーワードのセットを提供するときに便利です。多くのツールには、あらかじめ定義されたキーワードのセットがあります。たとえば、[フィールドの追加(Add Field)] の [フィールド タイプ] パラメータや、[オーバーレイ] ツールセットに含まれる多くのツールの [結合する属性] パラメータなどです。
Long および Double のデータ タイプで、値のリスト フィルタを使用できます。これらのタイプでは設定可能な数値を入力します。
複数の値を選択できるようにするには、[複数値] プロパティを [Yes] に設定します。
Boolean データ タイプでも値のリストを使用できます。Boolean データ タイプでは、値のリストに true 値と false 値の 2 つの値が含まれます。true 値が常にリストの 1 番目の値になります。これらの値は、コマンド ラインで値を指定するために使用されます。たとえば、[フィールドの追加(Add Field)] の IsNullable プロパティで使用される NULLABLE と NON_NULLABLE のキーワードをご参照ください。
範囲
Long または Double パラメータは、範囲フィルタを持つことができます。範囲フィルタでは、最小値と最大値の 2 つの値を使用します。リストの 1 番目の値が最小値です。最小値と最大値はどちらも範囲に含まれます。
フィーチャクラス
このフィルタでは、1 つ以上のフィルタ値を選択します。入力フィーチャクラスが、フィルタの値に対してチェックされます。たとえば、フィルタの値にポイントだけを選択した場合は、パラメータの値としてポイント フィーチャクラスしか入力できません。
ファイル
ファイル フィルタには、「*.txt」(簡単なテキスト ファイル)や「`.csv」(カンマ区切りファイル)などの、使用できるファイル接尾辞のリストが含まれます。接尾辞には任意のテキストを使用できます。ArcGIS で認識される接尾辞である必要はありません。接尾辞の長さは任意で、ドットは含めません。
フィールド
フィールド フィルタは、使用できるフィールド タイプを定義します。これには、Short、Long、Single、Double、Text、Date、OID、Geometry、BLOB、Raster、GUID、GlobalID、および XML が含まれます。複数の値をフィルタに設定できます。
ワークスペース
ワークスペース フィルタは、使用できる入力ワークスペースのタイプを指定します。これには 3 つの値があります。
- ファイル システム
シェープファイル、カバレッジ、INFO テーブル、およびグリッドを格納するためのシステム フォルダ
- ローカル データベース
パーソナルまたはファイル ジオデータベース
- リモート データベース
ArcSDE データベース接続
取得元
[取得元] プロパティには 2 つの目的があります。
- 派生出力パラメータの場合、[取得元] は、ツールによって変更される入力パラメータに設定されます。派生データと [取得元] の詳細については、前述の [タイプ] プロパティの説明をご参照ください。
- 入力パラメータの場合、[取得元] には、データ タイプに使用されるその他のパラメータの名前が含まれます。たとえば、入力フィールド データ タイプの場合、[取得元] は、次のように、フィールドを含むテーブル パラメータの名前に設定されます。
次の表のように、[取得元] は特定の入力パラメータに対してのみ設定できます。
入力データ タイプ |
取得元のデータ タイプ |
説明 |
---|---|---|
フィールドまたは SQL 文 |
テーブル |
そのフィールドを持つテーブル |
INFO アイテムまたは INFO 条件式 |
INFO テーブル |
そのアイテムを持つ INFO テーブル |
カバレッジ フィーチャクラス |
カバレッジ |
フィーチャを含むカバレッジ |
面積単位または距離単位 |
ジオデータセット |
デフォルト単位の決定に使用される地理データセット |
座標系 |
ワークスペース |
デフォルトの座標系の決定に使用されるワークスペース |
Network Analyst 階層設定 |
ネットワーク データセット |
階層情報を持つネットワーク データセット。 |
Geostatistical 値テーブル |
Geostatistical レイヤ |
テーブルを含む解析レイヤ |
シンボル
ツールの出力がフィーチャ セット、ラスタ、TIN、または ArcGIS Network Analyst エクステンション レイヤの場合、[シンボル] プロパティにレイヤ ファイル(*.lyr)の場所を指定できます。ツールを ArcMap、ArcGlobe、ArcScene から実行していて、[ジオプロセシング処理結果をマップに追加] が有効な場合、出力は表示に追加され、シンボル レイヤ ファイルに定義されたシンボルを使用して描画されます。
レイヤ ファイルは、ツールを実行するたびに読み込まれます。レイヤ ファイルが(移動または削除されたために)見つからない場合、デフォルトのシンボルが使用されます。