ToolValidator クラスの概要とパラメーター メソッドの使用法については、「スクリプト ツールの動作のカスタマイズ」をご参照ください。
パラメーター オブジェクト
ツール パラメーターへのアクセス
すべてのツール パラメーターは、ツールの整合チェックに便利なプロパティとメソッドを備えたパラメーター オブジェクトと関連付けられています。パラメーターは、Python リスト内に含まれています。標準的な方法では、次のコードに示すように、ツール クラスの ToolValidator クラスの __init__ メソッド内にパラメーターのリストを作成します。
def __init__(self):
import arcpy
self.params = arcpy.GetParameterInfo()
また、次のように (ToolValidator クラスではなく) スクリプト内でパラメーターにアクセスすることもできます。スクリプト内のパラメーター リストにアクセスする唯一の理由は、symbology プロパティにアクセスすることです。
import arcpy
params = arcpy.GetParameterInfo()
パラメーターの順序
ツールのパラメーターとその順序は、次のように、ツールのプロパティの [パラメーター] タブで定義されています。
メソッド
メソッド名 | 使用法の説明 |
---|---|
setErrorMessage(message:string) | パラメーターにエラー (赤の X 印) と該当するメッセージがあるとマークします。任意のパラメーターにエラーがある場合、ツールは実行できません。 |
setWarningMessage(message:string) | パラメーターに警告 (黄色の三角印) と該当するメッセージがあるとマークします。エラーと異なり、警告メッセージがある場合でもツールは実行します。 |
setIDMessage(messageType: string, messageID: string, {AddArgument1}, {AddArgument2}) | システム メッセージを設定できます。引数は、AddIDMessage 関数と同じです。 |
clearMessage() | メッセージのテキストを消去し、ステータスを情報 (エラーまたは警告なし) に設定します。 |
hasError() | パラメーターにエラーがある場合に true を返します。 |
hasWarning() | パラメーターに警告がある場合に true を返します。 |
isInputValueDerived() | ツールがモデル内で整合チェック中で入力値がモデル内にある別のツールの出力である場合に、true を返します。 |
プロパティ
プロパティ名 | 読み取り/書き込み | 値 | 説明 |
---|---|---|---|
name | 読み取り専用 | 文字列 | ツールのプロパティの [パラメーター] タブで定義されているパラメーター名。 |
direction | 読み取り専用 | 文字列: "Input"、"Output" | ツールのプロパティの [パラメーター] タブで定義されているパラメーターの入力/出力の方向。 |
datatype | 読み取り専用 | 文字列 | ツールのプロパティの [パラメーター] タブで定義されているデータ タイプ。 |
parameterType | 読み取り専用 | 文字列: "Required"、"Optional"、"Derived" | ツールのプロパティの [パラメーター] タブで定義されているタイプ。 |
読み取り/書き込み | Python リスト | 各従属パラメーターのインデックスのリスト。 | |
読み取り/書き込み | Value オブジェクト | パラメーターの値。 | |
defaultEnvironmentName | 読み取り専用 | 文字列 | ツールのプロパティの [パラメーター] タブで定義されているデフォルトの環境設定。 |
enabled | 読み取り/書き込み | ブール型 | パラメーターがグレー表示 (使用不可) の場合は false。 |
読み取り専用 | ブール型 | ユーザーが値を変更した場合は true。 | |
読み取り専用 | ブール型 | 内部整合チェック ルーチンがパラメーターをチェック済みの場合は true。 | |
読み取り/書き込み | 文字列 | パラメーターのカテゴリ。 | |
読み取り専用 | GP Schema オブジェクト | 出力データセットのスキーマ。 | |
読み取り専用 | GP Filter オブジェクト | パラメーター内の値に適用するフィルター。 | |
読み取り/書き込み | 文字列 | 出力の描画に使用するレイヤー ファイル (*.lyr) のパス。 | |
message | 読み取り専用 | 文字列 | ユーザーに表示するメッセージ。上記の SetErrorMessage および SetWarningMessage をご参照ください。 |
いくつかのコード例を以下に示します。その他のコード例については、「スクリプト ツールの動作のカスタマイズ」をご参照ください。
ToolValidator のプロパティ対スクリプト ツールのプロパティ
パラメーターのデフォルト値、フィルター、シンボル、依存性は、スクリプト ツールのプロパティ ダイアログ ボックスの [パラメーター] タブと、ToolValidator クラスの両方で設定できます。
ToolValidator で設定したプロパティは、スクリプト ツールのプロパティ ダイアログ ボックスで設定したプロパティを常に上書きします。たとえば、スクリプト ツールのプロパティ ダイアログ ボックスでパラメーターの値を「BLUE」に設定し、それを initializeParameters() で「RED」に再設定した場合、デフォルト値は「RED」になります。initializeParameters() が呼び出された後は、スクリプト ツールのプロパティ ダイアログ ボックスには、デフォルト値として「RED」が表示されます。スクリプトのプロパティ ダイアログ ボックスで、これら 4 つのパラメーターのプロパティを変更したのに保存されない場合は、そのプロパティが ToolValidator クラスで上書きされている可能性があります。
parameterDependencies
パラメーターの依存性は、通常、Schema オブジェクトで使用するために設定します。ツールのプロパティの [パラメーター] タブで、依存性がすでに設定されている場合が 2 つあります。
- タイプが Derived の出力データセット パラメーターの場合、依存性は出力の派生元となるパラメーターのインデックスです。
- 特定の入力データ タイプの場合、次の表に示したように、依存性はコントロールが使用する情報を含むパラメーターのインデックスです。
入力データ タイプ | 従属データ タイプ | 説明 |
---|---|---|
フィールドまたは SQL 文 | テーブル | そのフィールドを持つテーブル。 |
INFO アイテムまたは INFO 条件式 | INFO テーブル | そのアイテムを持つ INFO テーブル。 |
カバレッジ フィーチャクラス | カバレッジ | フィーチャを含むカバレッジ。 |
面積単位または距離単位 | ジオデータセット | デフォルト単位を決定する地理データセット。 |
座標 | ワークスペース | デフォルトの座標系を決定するワークスペース。 |
Network Analyst 階層の設定 | ネットワーク データセット | 階層情報を持つネットワーク データセット。 |
Geostatistical 値テーブル | Geostatistical レイヤー | テーブルを含む解析レイヤー。 |
通常、依存性は initializeParameters() メソッドで設定されます。
def initializeParameters(self):
# Set the dependencies for the output and its schema properties
#
self.params[2].parameterDependencies = [0, 1]
value
これは、ユーザーが入力したか、プログラムで設定したパラメーターの値です。initializeParameters() で値を設定すると、パラメーターの初期のデフォルト値になります。また、以下に示すように、ユーザー入力に対応して updateParameters() で値を設定することもできます。
def updateParameters(self):
# Set the default distance threshold to 1/100 of the larger of the width
# or height of the extent of the input features. Do not set if there is no
# input dataset yet, or the user has set a specific distance (altered is true).
#
if self.params[0].value:
if not self.params[6].altered:
extent = arcpy.Describe(self.params[0].value).extent
if extent.width > extent.height:
self.params[6].value = extent.width / 100
else:
self.params[6].value = extent.height / 100
return
パラメーターの value プロパティはオブジェクトを返します。ただし、パラメーターが設定されていない場合、value は None を返します。パラメーターが設定されない場合を避けるには、その値を使用する前に if チェックを使用します。
次のコード部では、値が文字列「Get Spatial Weights From File」と等しいかどうかをテストしています。このテストが機能するのは、パラメーターのデータ タイプが文字列だからです。
# If the option to use a weights file is selected, enable the
# parameter for specifying the file, otherwise disable it
if self.params[3].value: # check that parameter has a value
if self.params[3].value == "Get Spatial Weights From File":
self.params[8].enabled = True
else:
self.params[8].enabled = False
値オブジェクトは文字列の操作をサポートしていないため、文字列を操作または解析するときは、必ず値オブジェクトの値プロパティを使用します。次のサンプル コードは os.path.dirname メソッドを使用して、データセットからディレクトリを返しています。
if self.params[0].value:
workspace = os.path.dirname(self.params[0].value.value)
altered
altered は、出力パスの入力など、パラメーターの値が変更された場合に true になります。パラメーターを変更すると、ユーザーが値を空白にするまで変更済みの状態となります。空白にすると、未変更に戻ります。整合チェック コードによって値をプログラムから変更すると、変更済みの状態に変わります。つまり、パラメーターの値を設定すると、パラメーターの変更済み状態が更新されます。
altered は、パラメーターの値を変更できるかどうかを判別するために使用されます。たとえば、ツールにフィーチャクラスのパラメーターとキーワードのパラメーターがあるとします。フィーチャクラスにポイントまたはポリゴンが含まれる場合、キーワードは RED、GREEN、BLUE になり、ラインが含まれる場合、キーワードは ORANGE、YELLOW、PURPLE、WHITE になります。
ユーザーがポイント フィーチャクラスを入力したとします。キーワードのパラメーターが変更されていない場合、値をデフォルト値の RED を設定します。
ライン フィーチャクラスが入力された場合、キーワードのパラメーターが変更されていない限り、デフォルト値を ORANGE に設定します。
しかし、キーワードのパラメーターがユーザーによって変更された場合 (キーワードが GREEN に設定された場合)、キーワードを再設定してはなりません。ユーザーは GREEN を選択しましたが、その意図がわからないからです。ユーザーは、GREEN が有効になるようにフィーチャクラスを変更するかもしれませんし、キーワードを (PURPLE などに) 変更するかもしれません。GREEN は、ライン用に作成したキーワード群のメンバーではないため、内部整合チェックは、このパラメーターにエラーのフラグを付けます。この時点で、ユーザーには、入力フィーチャクラスを変更するかキーワードを変更するかの 2 つの選択肢があります。
if not self.params[2].altered:
self.params[2].value = "POINT"
hasBeenValidated
hasBeenValidated は、updateParameters() と内部整合チェックが最後に呼び出されてから、ユーザーがパラメーターの値を変更した場合に、false になります。内部整合チェックが呼び出されると、ジオプロセシングはすべてのパラメーターについて hasBeenValidated を true に自動的に設定します。
hasBeenValidated は、updateParameters() を最後に呼び出してから、ユーザーが値を変更したかどうかを判別するために使用されます。この情報は、パラメーターを独自にチェックするかどうかを決定する際に利用できます。
# Set the default distance threshold to 1/100 of the larger of the width
# or height of the extent of the input features. Do not set if there is no
# input dataset yet, or if the input features have already been validated,
# or the user has set a specific distance (Altered is true).
#
import string
if self.params[0].value and not self.params[0].hasBeenValidated:
if not self.params[6].altered:
extent = arcpy.Describe(self.params[0].value).extent
width = extent.width
height = extent.height
if width > height:
self.params[6].value = width / 100
else:
self.params[6].value = height / 100
category
ツール ダイアログ ボックスのサイズを最小限に抑えるために、パラメーターをさまざまなカテゴリに配置できます。ArcGIS Network Analyst エクステンション ツールは、次のようにカテゴリを使用しています。
カテゴリは 1 回だけ設定するので、設定は initializeParameters() で行います。updateParameters() でカテゴリを設定しても効果はありません。次のコードでは、パラメーター 4 および 5 を「Option」カテゴリ、パラメーター 6 および 7 を「Advanced」カテゴリに配置しています。
def initializeParameters(self):
self.params[4].category = "Options"
self.params[5].category = "Options"
self.params[6].category = "Advanced"
self.params[7].category = "Advanced"
カテゴリは、必ず未分類パラメーターの後ろに表示されます。必須パラメーターは、ツール ダイアログ ボックスで見つけやすいように、カテゴリ内には配置しないでください。
symbology
symbology プロパティは、レイヤー ファイル (*.lyr) を出力パラメーターと関連付けます。
params[2].symbology = "E:/tools/extraction/ToolData/ClassByDist.lyr"
schema オブジェクト
タイプがフィーチャクラス、テーブル、ラスター、ワークスペースのすべての出力パラメーターは、schema オブジェクトを持ちます。フィーチャクラス、テーブル、ラスター、ワークスペースの出力だけがスキーマを持ちます。他のタイプはスキーマを持ちません。schema オブジェクトは、ジオプロセシングによって作成されます。このスキーマには、パラメーター オブジェクトを通してアクセスし、ツールの出力を記述するためのルールを設定します。スキーマのルールを設定して、ToolValidator クラスから戻ると、ジオプロセシングの内部整合チェック コードは設定されたルールを調べ、出力の記述を更新します。
確認のため、制御の流れを以下に示します。
- ツール ダイアログ ボックスを最初に開いたときに、initializeParameters() が呼び出されます。出力を記述するために、静的ルール (ユーザー入力に基づいて変更されないルール) を設定します。この時点では、ユーザーは (デフォルト値を設定していない限り) パラメーターに値を指定していないため、出力の記述は作成されません。
- ユーザーがツール ダイアログ ボックスに何らかの対話的操作を行うと、updateParameters() が呼び出されます。
- updateParameters() は、[フィールドの追加 (Add Field)] での新しいフィールドの追加といった、パラメーターの依存性から決定できない動的な動作を扱う schema オブジェクトを変更できます。
- updateParameters() の終了後、内部整合チェック ルーチンが呼び出され、schema オブジェクト内にあるルールが適用されて、出力データの記述が更新されます。
- 次に、updateMessages() が呼び出されます。内部整合チェックが作成した警告およびエラー メッセージを調べて、それらを変更したり、独自の警告やエラー メッセージを追加したりできます。
すべての schema プロパティは、読み取り専用の type を除いて、すべてが読み書き可能です。
プロパティ名 | 値 |
---|---|
type | 文字列: "Feature"、"Table"、"Raster"、"Container" (ワークスペースおよびフィーチャ データセットの場合) (読み取り専用プロパティ) |
clone | ブール型 |
featureTypeRule | 文字列: "AsSpecified"、"FirstDependency" |
featureType | 文字列: "Simple"、"Annotation"、"Dimension" |
geometryTypeRule | 文字列: "Unknown"、"FirstDependency"、"Min"、"Max"、"AsSpecified" |
geometryType | 文字列: "Point"、"Multipoint"、"Polyline"、"Polygon" |
extentRule | 文字列: "AsSpecified"、"FirstDependency"、"Intersection"、"Union"、"Environment" |
extent | 範囲オブジェクト |
fieldsRule | 文字列: "None"、"FirstDependency"、"FirstDependencyFIDs"、"All"、"AllNoFIDs"、"AllFIDsOnly" |
additionalFields | フィールド オブジェクトの Python リスト。 |
cellSizeRule | 文字列: "AsSpecified"、"FirstDependency"、"Min"、"Max"、"Environment" |
cellsize | Double |
rasterRule | 文字列: "FirstDependency"、"Min"、"Max"、"Integer"、"Float" |
rasterFormatRule | 文字列: "Img"、"Grid" |
additionalChildren | ワークスペース スキーマに追加するデータセットの Python リスト |
FirstDependency の使用
いくつかのルールは "FirstDependency" に設定できます。これは、parameter.parameterDependencies を使用して、パラメーターの依存性配列セット内にある最初のパラメーターの値を使用することを意味します。次のコードの例では、パラメーター 2 には 0 と 1 の 2 つの従属パラメーターがあり、最初の依存性はパラメーター 0 です。
# Set the dependencies for the output and its schema properties
#
self.params[2].parameterDependencies = [0, 1]
従属パラメーターが複数値 (値のリスト) の場合、複数値リストの最初の値が使用されます。
type
type プロパティは読み取り専用で、ジオプロセシングによって設定されます。
clone
true の場合、ジオプロセシングは、最初の従属パラメーター内にある記述の厳密なコピー (クローン) を作成します。デフォルト値は false です。通常は、initializeParameters() メソッド内で clone を true に設定します。最初の従属パラメーターが複数値 (値のリスト) の場合、複数値リストの最初の値に対してクローンが作成されます。
- parameter.parameterType が "Derived" の場合、厳密なコピーが作成されます。[フィールドの追加 (Add Field)] ツールの動作はこれです。
- parameter.parameterType が "Required" の場合、厳密なコピーも作成されますが、データセットへのカタログ パスが変更されます。カタログ パスは 2 つの部分 (ワークスペースとベース名) で構成されます。たとえば、次のように指定します。
E:/Data/TestData/netcity.gdb/infrastructure/roads
- ワークスペース = E:/Data/TestData/netcity.gdb/infrastructure
- ベース名 = roads
- ベース名は、データセットを含む最初の入力パラメーター (最初の依存性ではなく、最初のパラメーター) のベース名に、スクリプト ツールの名前を付けたものになります (例: roads_MyTool)。
- ワークスペースは、テンポラリ ワークスペース環境設定に設定されます。これが空の場合、現在のワークスペース環境設定が使用されます。これが空の場合、データセットを含む最初の入力パラメーターのワークスペースが使用されます。このワークスペースが読み取り専用の場合は、システムのテンポラリ ディレクトリが使用されます。
clone を true に設定すると、featureTypeRule、geometryTypeRule、extentRule など、すべてのルールベースのメソッドが "FirstDependency" に設定されます。
次の 2 つのコード例は、同じ処理を行います。両方とも、[クリップ (Clip)] ツールが出力スキーマを作成する方法に基づいています。
例 1: すべてのルールの明示的な設定
def initializeParameters(self):
# Set the dependencies for the output and its schema properties
# The two input parameters are feature classes.
#
self.params[2].parameterDependencies = [0, 1]
# Feature type, geometry type, and fields all come from the first
# dependency (parameter 0), the input features
#
self.params[2].schema.featureTypeRule = "FirstDependency"
self.params[2].schema.geometryTypeRule = "FirstDependency"
self.params[2].schema.fieldsRule = "FirstDependency"
# The extent of the output is the intersection of the input features
# and the clip features (parameter 1)
#
self.params[2].schema.extentRule = "Intersection"
return
例 2: clone を使用してルールを FirstDependency に設定後、範囲ルールを上書き
def initializeParameters(self):
# Set the dependencies for the output and its schema properties
# The two input parameters are feature classes.
#
self.params[2].parameterDependencies = [0, 1]
self.params[2].schema.clone = True
return
def updateParameters(self):
# The only property of the clone that changes is that the extent
# of the output is the intersection of the input features
# and the clip features (parameter 1)
#
self.params[2].schema.extentRule = "Intersection"
return
featureTypeRule
この設定は、出力フィーチャクラスのフィーチャ タイプを決定します。このルールは、出力ラスターまたはテーブルには影響しません。
値 | 説明 |
---|---|
"AsSpecified" | フィーチャ タイプは、featureType プロパティによって決定されます。 |
"FirstDependency" | フィーチャ タイプは、依存性の最初のパラメーターと同じになります。最初の従属パラメーターが複数値 (値のリスト) の場合、複数値リストの最初の値が使用されます。 |
featureType
featureTypeRule が "AsSpecified" のとき、featureType の値は出力のフィーチャ タイプを指定するために使用されます。
値 | 説明 |
---|---|
"Simple" | 出力は、シンプル フィーチャを含みます。フィーチャのジオメトリ タイプは、geometryTypeRule を使用して指定されます。 |
"Annotation" | 出力は、アノテーション フィーチャを含みます。 |
"Dimension" | 出力は、ディメンション フィーチャを含みます。 |
geometryTypeRule
この設定は、出力フィーチャクラスのジオメトリ タイプ (ポイントやポリゴンなど) を決定します。
値 | 説明 |
---|---|
"Unknown" | これがデフォルトです。通常は、他のパラメーターの値に基づいて、updateParameters() 内のジオメトリ タイプを判別できるはずです。ルールを "Unknown" に設定するのは、ジオメトリ タイプを判別するのに十分な情報がない場合だけです。 |
"FirstDependency" | ジオメトリ タイプは、最初の従属パラメーターと同じになります。最初の従属パラメーターが複数値 (値のリスト) の場合、複数値リストの最初の値が使用されます。 |
"Min"、"Max" | すべての従属パラメーターのジオメトリを調べ、出力ジオメトリ タイプをその中の最小または最大タイプに設定します。"Min" と "Max" は、次のように定義されます。
|
"AsSpecified" | ジオメトリ タイプは、geometryType プロパティの値によって決定されます。 |
geometryType
geometryTypeRule が "AsSpecified" のときに、使用するジオメトリ タイプ ("Point"、"Multipoint"、"Polyline"、"Polygon" のいずれか) に設定します。
extentRule
値 | 説明 |
---|---|
"AsSpecified" | 出力範囲は、extent プロパティで指定されます。 |
"FirstDependency" | 出力範囲は、最初の従属パラメーターと同じになります。最初の従属パラメーターが複数値 (値のリスト) の場合、複数値リストの最初の値が使用されます。 |
"Intersection" | 出力範囲は、すべての従属パラメーターの交差部分になります (以下に示すように、これは [クリップ (Clip)] ツールが使用する内容です)。 |
"Union" | 出力範囲は、すべての従属パラメーターの幾何学的ユニオンになります。 |
"Environment" | 出力範囲は、出力範囲環境設定に基づき計算されます。 |
例
# The extent of the output is the intersection of the input features
# and the clip features (the dependent parameters)
#
self.params[2].schema.extentRule = "Intersection"
extent
extentRule が "AsSpecified" のときに、使用する範囲に設定します。範囲は、4 つの値を持つスペースで区切られた文字列または Python リスト オブジェクトで設定できます。順序は、xmin、ymin、xmax、ymax です。
例
self.params[2].schema.extentRule = "AsSpecified"
self.params[2].schema.extent = "123.32 435.8 987.3 567.9"
Python リストを使用した場合
xmin = 123.32
ymin = 435.8
xmax = 987.3
ext = [xmin, ymin, xmax, 567.9]
self.params[2].schema.extent = ext
fieldsRule
fieldsRule は、出力フィーチャクラスまたはテーブルに存在するフィールドを決定します。
次の表で、FID はフィーチャ ID を表していますが、実際は、すべてのフィーチャクラスまたはテーブルにある ObjectID フィールドを参照しています。
値 | 説明 |
---|---|
"None" | オブジェクト ID 以外のフィールドは出力されません。 |
"FirstDependency" | 出力フィールドは、最初の従属パラメーターと同じになります。最初の従属パラメーターが複数値 (値のリスト) の場合、複数値リストの最初の値が使用されます。 |
"FirstDependencyFIDs" | 最初の従属入力の ObjectID だけが出力に書き込まれます。 |
"All" | 従属パラメーターのリスト内にあるすべてのフィールドが出力されます。 |
"AllNoFIDs" | ObjectID を除くすべてのフィールドが出力に書き込まれます。 |
"AllFIDsOnly" | すべての ObjectID フィールドが出力に書き込まれますが、入力のその他のフィールドは書き込まれません。 |
fieldsRule に "FirstDependency" を使用した [クリップ (Clip)] の例
def initializeParameters(self):
# Set the dependencies for the output and its schema properties
# The two input parameters are feature classes.
#
self.params[2].parameterDependencies = [0, 1]
# Feature type, geometry type, and fields all come from the first
# dependency (parameter 0), the input features
#
self.params[2].schema.featureTypeRule = "FirstDependency"
self.params[2].schema.geometryTypeRule = "FirstDependency"
self.params[2].schema.fieldsRule = "FirstDependency"
# The extent of the output is the intersection of the input features
# and the clip features (parameter 1)
#
self.params[2].schema.extentRule = "Intersection"
return
additionalFields
fieldsRule を使用して追加されたフィールドの他にも、追加フィールドを出力に追加できます。additionalFields は、 フィールド オブジェクトの Python リストを使用します。
cellSizeRule
出力ラスターまたはグリッドのセルサイズを決定します。
値 | 説明 |
---|---|
"AsSpecified" | 出力セルサイズは、cellSize プロパティで指定されます。 |
"FirstDependency" | セル サイズは、最初の従属パラメーターから計算されます。従属パラメーターがラスターの場合、そのセルサイズが使用されます。従属パラメーターがフィーチャクラスやフィーチャ データセットなど、他のタイプの場合、データの範囲を使用してセルサイズが計算されます。最初の従属パラメーターが複数値 (値のリスト) の場合、複数値リストの最初の値が使用されます。 |
"Min"、"Max" | "Min" の場合、出力セルサイズは従属パラメーターの最小セルサイズになります。"Max" の場合、出力セルサイズは従属パラメーターの最大セルサイズになります。 |
"Environment" | 出力セルサイズは、セルサイズ環境設定に基づいて計算されます。 |
cellSize
cellSizeRule が "AsSpecified" のときに、使用するセルサイズに設定します。
rasterRule
出力ラスターに含まれるデータ タイプ (整数または浮動小数) を決定します。
値 | 説明 |
---|---|
"FirstDependency" | データ タイプ (整数または浮動小数) は、最初の従属パラメーターと同じになります。最初の従属パラメーターが複数値 (値のリスト) の場合、複数値リストの最初の値が使用されます。 |
"Min"、"Max" | 整数は浮動小数より小さいと見なされます。たとえば、2 つの従属パラメーターがあり、一方は整数を含み、他方は浮動小数を含む場合、"Min" は整数の出力を作成し、"Max" は浮動小数の出力を作成します。 |
"Integer" | 出力ラスターには整数 (自然数) が含まれます。 |
"Float" | 出力ラスターには浮動小数 (有理数) が含まれます。 |
rasterFormatRule
出力ラスターの形式 ("Grid" または "Img") を決定します。デフォルトは "Img" です。これは、ERDAS IMAGINE 形式です。"Grid" は Esri の形式です。
additionalChildren
ワークスペースは、データセット (フィーチャ、テーブル、ラスター) のコンテナーです。これらのデータセットは、ワークスペースの子です (ワークスペースは親と考えます)。ツールがデータセットを新規または既存のワークスペースに追加する場合、子の記述を追加することで、ワークスペースの記述を更新することができます。たとえば、フィーチャクラスのリスト (複数値) を使用して、何らかの方法でそれらのフィーチャクラスを変更してから、変更したフィーチャクラスを既存のワークスペースに書き込むツールがあるとします。ModelBuilder でこのツールを使用する場合、ワークスペースはツールの派生出力となり、このワークスペースを [データの選択 (Select Data)] ツールへの入力として使用できます。[データの選択 (Select Data)] では、コンテナー内にある子のデータセットを選択して、それを別のツールの入力として使用できます。
additionalChildren への入力は、1 つ以上の子の記述です。子の記述には、2 つの形式があります。
形式 | 説明 |
---|---|
value オブジェクト | value プロパティから返されるフィーチャクラス、テーブル、ラスター、ディメンション、またはアノテーション値。 |
[type, name, fields, extent, spatial reference] という形式の Python リスト オブジェクト | 追加する子の記述を含む Python リスト。リスト内の最初の 2 つのエントリであるタイプと名前だけが必須です。残りの引数はオプションです。 |
複数の子を追加する場合、子の記述のリストを指定します。Python リスト オブジェクトの形式で子を追加している場合、additionalChildren のリストのリストを作成します。
Python リストの形式には、次の表に示したように 5 つの引数があります。
引数 | 種類 | 説明 |
---|---|---|
type | 必須 | "Point"、"Multipoint"、"Polyline"、"Polygon"、"Table"、"Raster"、"Annotation"、"Dimension" のいずれか |
name | 必須 | データセットの名前。データセットのベース名 ("streets") またはフル カタログ パス ("E:\mydata\test.gdb\infrastructure\streets") を使用できます。フル カタログ パスで指定した場合、ベース名 ("streets") 以外は無視されます。 |
fields | オプション | フィールド オブジェクトの Python リスト。これには、子にあるフィールドが含まれます (既知の場合)。 |
extent | オプション | 子の空間範囲を含む文字列または Python リスト。 |
spatial reference | オプション | 空間参照オブジェクト。 |
これらの引数は、この順序で指定する必要があります。オプションの引数をスキップするには、Python のキーワード None または "#" を使用します。
次に、ワークスペース スキーマを設定する例をいくつか示します。これらの例は、次の引数を持つスクリプト ツールに基づいています。
パラメーター名 | プロパティ | |
---|---|---|
0 | 入力フィーチャクラス | フィーチャクラス - 入力。 |
1 | 入力テーブル | テーブル - 入力。 |
2 | 入力ワークスペース | ワークスペース - 入力 (ツールの結果を持つ既存のワークスペース)。 |
3 | 派生ワークスペース | ワークスペース - 派生出力、取得元は Input_workspace。このワークスペースのスキーマは、追加の子を持つように変更されます。 |
このツールは、入力フィーチャクラスとテーブルを使い、両方をワークスペースにコピーして、新しいフィールドをフィーチャクラスに追加してから、新しいポリゴン フィーチャクラスをワークスペースに作成します (ここでの目的はワークスペース スキーマの設定を示すことなので、ツールの実際の処理は重要ではありません)。以下のコード例は互いを利用して構築されており、まず additionalChildren を単純に使用しています。以下のコード例をいくつか実装してテストする場合は、次のモデルを使用してコードをテストできます。
initializeParameters() では、従属パラメーター (パラメーター 2) から、出力ワークスペースのクローンが作成されます。この依存性は、ツールのプロパティで設定されますが、initializeParameters() で設定して、ツールのプロパティで誰かが依存性を削除してしまうのを防ぐこともできます。
class ToolValidator:
def __init__(self):
import arcpy
self.params = arcpy.GetParameterInfo()
def initializeParameters(self):
self.params[3].parameterDependencies = [2] # input workspace
self.params[3].schema.clone = True # Copy all existing contents to output
return
例: 2 つの入力 (未変更) を出力ワークスペースにコピーします。
def updateParameters(self):
inFC = self.params[0].value # input feature class
inTable = self.params[1].value # input table
inWS = self.params[2].value # input workspace
if inFC and inTable and inWS:
self.params[3].schema.additionalChildren = [inFC, inTable]
return
例: ツールが、新しいポリゴン フィーチャクラスを作成します。この新しいフィーチャクラスについて (整合チェック時に) わかるプロパティは、名前 ("SummaryPolygon") とタイプ ("polygon") だけです。
children = [] # New empty list
children.append(inFC)
children.append(inTable)
children.append(["polygon", "SummaryPolygon"])
self.params[3].schema.additionalChildren = children
例: 入力フィーチャクラスにフィールドを追加します。
# Create a field object with the name "Category" and type "Long"
#
newField = arcpy.Field()
newField.name = "Category"
newField.type = "Long"
# Describe the input feature class in order to get its list of fields. The 9.3
# version of the geoprocessing object returns fields in a Python list, unlike
# previous versions, which returned fields in an enumerator.
#
desc = arcpy.Describe(inFC)
fieldList = desc.fields
# Add the new field to the list
#
fieldList.append(newField)
# Create a new child based on the input feature class, but with the
# additional field added
#
newChild = [desc.shapeType, desc.catalogPath, fieldList,
desc.extent, desc.spatialReference]
# Now create our list of children and add to the schema
#
children = []
children.append(newChild)
children.append(inTable)
children.append(["polygon", "SummaryPolygon"])
self.params[3].schema.additionalChildren = children
SummaryPolygon(新しいポリゴン フィーチャクラス) のフィールドを作成するには、上記の例で示したパターンに似たフィールド オブジェクトのリストを作成します。
例: 複数値の入力
この例では、最初のパラメーターはフィーチャクラスの複数値です。複数値内の各フィーチャクラスは、派生ワークスペースにコピーされます。コピーされた各フィーチャクラスに、ProjectID という新しいフィールドが追加されます。
# 0 - input features (multivalue)
# 1 - input workspace
# 2 - derived workspace
class ToolValidator:
def __init__(self):
import arcpy
self.params = arcpy.GetParameterInfo()
def initializeParameters(self):
self.params[2].parameterDependencies = [1]
self.params[2].schema.clone = True
return
def updateParameters(self):
inVT = self.params[0].value # multivalue ValueTable
inWS = self.params[1].value # WorkSpace
# Add each feature class to the output workspace. In addition,
# add a new field "ProjectID" to each feature class
#
if inVT and inWS:
rowCount = inVT.rowCount # Number of rows in the MultiValue table
children = []
newField = arcpy.Field()
newField.name = "ProjectID"
newField.type = "Long"
for row in range(0, rowCount):
value = inVT.getValue(row, 0)
if value:
d = arcpy.Describe(value)
fieldList = d.fields
# Note -- not checking if field already exists
#
fieldList.append(newField)
# Create new child with additional ProjectID field and
# add child to list of children
#
child = [d.shapeType, d.catalogPath, fieldList]
children.append(child)
self.params[2].schema.additionalChildren = children
return
def updateMessages(self):
return
filter オブジェクト
filter オブジェクトを使用すると、ユーザーが利用できるパラメーターを指定できます。たとえば、選択肢をテキスト フィールドだけに制限するフィールド フィルターを設定できます。フィルターには、3 つの働きがあります。
- フィルターは、ユーザーに対してデータの参照時に有効な選択肢だけを提供します。ポイント フィーチャクラスにフィルターを設定する場合、ユーザーがデータを参照するときに、ポイント フィーチャクラスだけが表示されます。テキスト フィールドにフィルターを設定する場合、フィールドのドロップダウン リストにはテキスト フィールドだけが表示されます。
- ユーザーが (リストやファイル ブラウザーから値を選択するのではなく) パラメーター値を入力する場合、その値がフィルターに対してチェックされます。ユーザーが不正な値 (テキスト フィールドではなく数値フィールドなど) を入力した場合、警告またはエラーが自動的に設定されます。
- 値はフィルターに対して内部整合チェックでチェックされるため、フィルターを使用することで、ToolValidator クラス内に独自の整合チェックをプログラムする必要がなくなります。
フィルターを指定するには、次の 2 つの方法があります。
- ツールのプロパティ ダイアログ ボックスの [パラメーター] タブで、パラメーターをクリックしてから、[フィルター] の横にあるセルをクリックして、ドロップダウン リストからフィルター タイプを選択します。フィルター タイプを選択すると、ダイアログ ボックスが開くので、フィルターの値を指定します。
- ToolValidator クラス内のプログラムで値を設定できます (以下に例を示します)。ジオプロセシングは、文字列、long、double、フィーチャクラス、ファイル、フィールド、ワークスペースのタイプのパラメーターに対して、フィルターを自動的に作成します。ツールのプロパティ ダイアログ ボックスでフィルターを選択していない場合でも、パラメーターには空のフィルターが関連付けられています。空のフィルターは、フィルターがない場合と同じです。空のフィルターに値を追加することで、フィルターを有効化して、ユーザーの選択肢をフィルターの内容に制限することができます。
次の表に示すように、フィルターには 6 つの種類があります。
フィルターのタイプ | 値 |
---|---|
ValueList | 文字列または数値のリスト。String、Long、Double、Boolean のデータ タイプを使用します。 |
範囲値 | 最小値と最大値。Long および Double のデータ タイプの場合に使用されます。 |
フィーチャクラス | 使用可能なフィーチャクラス タイプのリスト。"Point"、"Multipoint"、"Polyline"、"Polygon"、"MultiPatch"、"Sphere"、"Annotation"、"Dimension" の値を指定します。複数の値をフィルターに設定できます。 |
ファイル | ファイル接尾辞 ("*.txt"、"*.e00"、"*.ditamap" など) のリスト。 |
フィールド | 使用できるフィールド タイプのリスト。"Short"、"Long"、"Single"、"Double"、"Text"、"Date"、"OID"、"Geometry"、"Blob"、"Raster"、"GUID"、"GlobalID"、"XML" の値を指定します。複数の値をフィルターに設定できます。 |
ワークスペース | 使用できるワークスペース タイプのリスト。"FileSystem"、"LocalDatabase"、"RemoteDatabase" の値を指定します。1 つまたは複数の値を設定できます。 |
プロパティ
プロパティ | 説明 |
---|---|
type | フィルターのタイプ (ValueList、Range、FeatureClass、File、Field、Workspace)。Long および Double のパラメーターを扱うときに、フィルターのタイプを設定できます (以下の注意をご参照ください)。その他のタイプのパラメーターの場合、フィルターの有効なタイプは 1 つだけなので、これらのパラメーターのタイプの設定は無視されます。値をフィルターしない場合は、リスト プロパティを空のリストに設定します。 |
list | フィルターの値の Python リスト。値をフィルターしない場合は、リスト プロパティを空のリストに設定します。 |
ValueList
文字列パラメーターの場合の ValueList
文字列パラメーターの場合、リストには任意の数の文字列を含めることができます。次の例では、initializeParameters() に文字列値のリストを設定しています。パラメーターには、"NEW_FORMAT" と "OLD_FORMAT" の 2 つの選択肢があります。
def initializeParameters(self):
# Set the fixed list of "file format type" parameter choices and its
# default value
#
self.params[1].filter.list = ["OLD_FORMAT", "NEW_FORMAT"]
self.params[1].value = "OLD_FORMAT"
return
上の例では、ツールのプロパティ ダイアログ ボックスの [パラメーター] タブで、値のリストを同様に設定できます。実際、値のリストを ("OLD" と "NEW" のように) 他の値に設定した場合、これらの値は、initializeParameters() が呼び出されたときに、"OLD_FORMAT" と "NEW_FORMAT" に置き換えられます。デフォルト値についても同じです。ツールのプロパティ ダイアログ ボックスで設定できますが、ToolValidator でリセットされます。
次のコードはこの例の続きで、updateParameters() において、ユーザーが "OLD_FORMAT" と "NEW_FORMAT" のどちらを選択するかに応じて、別のパラメーターの値のリストを変更しています。
def updateParameters(self):
# Update the value list filter of the "feature type in file" parameter
# depending on the "file format type" parameter.
#
if self.params[1].value.upper() == "OLD_FORMAT":
self.params[2].filter.list = ["POINT", "LINE", "POLYGON"]
elif self.params[1].value.upper() == "NEW_FORMAT":
self.params[2].filter.list = ["POINT", "LINE", "POLYGON",
"POINT_WITH_ANNO",
"LINE_WITH_ANNO",
"POLYGON_WITH_ANNO"]
# Provide default value for "feature type in file" parameter
#
if not self.params[2].altered:
self.params[2].value = "POINT"
Long および Double パラメーターの場合の ValueList
Long または Double のパラメーターは、数値のリストを持つことができます。ユーザーは、リスト内にある値だけを選択または入力できます。
# Set filter for a Long parameter
#
self.params[7].filter.list = [10, 20, 30, 40, 50]
# Set filter for a Double parameter
#
self.params[8].filter.list = [10.0, 12.5, 15.0]
ブール型パラメーターの場合の ValueList
ブール型パラメーターには、true 値と false 値の 2 つの値があります。true 値が常にリストの 1 番目の値になります。
def initializeParameters(self):
# Set the Boolean choice for including or excluding angles
#
self.params[6].filter.list = ["ANGLE", "NO_ANGLE"]
# Set the default value to false (no angle)
#
self.params[6].value = "NO_ANGLE"
return
def updateParameters(self):
# Enable angle format parameter if user wants angles
#
if self.params[6].value.upper() == "ANGLE":
self.params[7].enabled = True
範囲値
Long または Double パラメーターは、範囲フィルターを持つことができます。範囲フィルターでは、最小値と最大値の 2 つの値を使用します。リストの 1 番目の値が最小値です。最小値と最大値はどちらも範囲に含まれます。
def initializeParameters(self):
# Utility values must be between -10 and 10.
#
self.params[7].filter.list = [-10, 10]
Long および Double パラメーターのフィルター タイプの設定
Long および Double パラメーターの場合、デフォルトのフィルター タイプは ValueList です。範囲フィルターにする場合は、次のように initializeParameters() でフィルター タイプを設定します。
def initializeParameters(self):
# Set the 'score' value parameters to a range filter
#
self.params[7].filter.type = "Range"
self.params[7].filter.list = [-10, 10]
フィルター タイプを設定できるのは、Long および Double パラメーターの場合だけです。
フィーチャクラス
次の例では、ある入力パラメーターのフィーチャ タイプを別の入力パラメーターのフィーチャ タイプに基づいて設定しています。
def updateParameters(self):
# Set the input feature type of the second parameter based
# on the feature type of the first parameter.
#
if self.params[0].value:
desc = arcpy.Describe(self.params[0].value)
feature_type = desc.shapeType.lower()
if feature_type == "polygon":
self.params[1].filter.list = ["point", "multipoint"]
elif feature_type == "polyline":
self.params[1].filter.list = ["polygon"]
elif feature_type == "point" or \
feature_type == "multipoint":
self.params[1].filter.list = ["polyline"]
else:
self.params[1].filter.list = []
return
ファイル
ファイル フィルターには、「.txt」(簡単なテキスト ファイル) や「.csv」(カンマ区切りファイル) などの、使用できるファイル接尾辞のリストが含まれます。接尾辞には任意のテキストを使用できます。ArcGIS で認識される接尾辞である必要はありません。接尾辞の長さは任意で、ドットは含めません。次の例では、入力 File パラメーターにフィルターを設定しています。
def initializeParameters(self):
# Set the input file type to our recognized options file suffixes
#
self.params[0].filter.list = ["opt56", "opt57", "globalopt"]
return
フィールド
フィールド フィルターは、使用できるフィールド タイプを定義します。使用できる値は、"Short"、"Long"、"Float"、"Single"、"Double"、"Text"、"Date"、"OID"、"Geometry"、"Blob"、"Raster"、"GUID"、"GlobalID"、および "XML" です。
表示名と内部名
次の表に示したように、内部名を持つフィールド タイプが 4 つあります。
表示名 | 内部名 |
---|---|
Short | SmallInteger |
Long | 整数 |
浮動小数点 | 単一 |
テキスト | String |
フィールド フィルターを指定する場合、表示名と内部名のいずれかを使用できます。つまり、次の 2 行のコードは同じです。
self.params[1].filter.list = ["short", "long", "float", "text"]
self.params[1].filter.list = ["smallinteger", "integer", "single", "string"]
"short" のように表示名で指定した場合、表示名は変換され、フィルター内には "SmallInteger" として格納されます。フィールド フィルターの値にアクセスしなくてはならない場合はほとんどありませんが、アクセスする場合は内部名が格納されていることに注意してください。次のコード部は、このアクセス方法を示しています。
self.params[1].filter.list = ["short", "long"]
#
if self.params[1].filter.list[0].lower() == "smallinteger":
# do something
デフォルト フィールド値の設定
フィールド パラメーターに対して、デフォルト値を設定できます。これには、次のように、入力テーブルのフィールドをループ処理して、フィルターを満たす最初のフィールドを取得します。
def initializeParameters(self):
self.params[1].filter.list = ["short", "long", "float", "double"]
return
def updateParameters(self):
if self.params[0].value and not self.params[1].altered:
self.params[1].value = ""
desc = arcpy.Describe(self.params[0].value)
fields = desc.fields
# Set default to the first field that matches our filter
#
for field in fields:
fType = field.type.lower()
if fType in ["smallinteger", "integer", "single", "double"]:
self.params[1].value = field.name
break
return
ワークスペース
ワークスペース フィルターは、使用できる入力ワークスペースのタイプを指定します。これには 3 つの値があります。
ワークスペース フィルター | 説明 |
---|---|
"FileSystem" | シェープファイル、カバレッジ、INFO テーブル、およびグリッドを格納するためのシステム フォルダー |
"LocalDatabase" | パーソナルまたはファイル ジオデータベース |
"RemoteDatabase" | ArcSDE データベース接続 |