ほぼすべてのツールにはパラメーターがあり、そのパラメーター値はツール ダイアログ ボックスまたはスクリプト内で設定します。ツールを実行すると、パラメーター値がツールのソース コードに送られます。ツールはその値を読み込んで、処理を続けます。
パラメーターの詳細については、「スクリプト ツールのパラメーターの概要」をご参照ください。
スクリプト ツール パラメーターは、[スクリプトの追加] ウィザードを使用しているときに設定できます。また、ツールの [プロパティ] ダイアログ ボックスから、スクリプト ツール パラメーターを追加、削除、変更することもできます。スクリプト ツールのプロパティにアクセスするには、ツールを右クリックして、[プロパティ] → [パラメーター] タブの順にクリックします。
[スクリプトの追加] ウィザードまたは [プロパティ] ダイアログ ボックスのどちらでパラメーターを設定する場合でも、手順 (ここで説明します) は同じです。
新しいパラメーターを追加するには、[表示名] 列の最初の空のセルをクリックして、パラメーターの名前を入力します。これは、ツール ダイアログ ボックスに表示される名前です。名前には、スペースを入れることができます。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] になります。
- ツールが既知の場所にデータを作成する場合。たとえば、既知のワークスペース内にある既存のテーブルを更新するスクリプトなどが挙げられます。ユーザーは、ダイアログ ボックスまたはスクリプト内で、このテーブルを指定する必要はありません。
すべてのツールには出力が必要です
すべてのスクリプト ツールは、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 から実行していて、[ジオプロセシング処理結果をマップに追加] が有効な場合、出力は表示に追加され、シンボル レイヤー ファイルに定義されたシンボルを使用して描画されます。