値の計算(Calculate Value) (ModelBuilder)
サマリ
[値の計算(Calculate Value)] ツールは、指定された Python 式に基づいて値を返します。
使用法
-
このツールは、ModelBuilder で使用するためのツールで、Python スクリプトでは使用できません。
-
ModelBuilder で [データ タイプ] パラメータを使用することで、[値の計算(Calculate Value)] ツールの出力を他のツールに連結できます。たとえば、[値の計算(Calculate Value)] ツールを使用して、[バッファ(Buffer)] ツールの [バッファ距離] パラメータの入力として使用する距離の演算を行う場合は、[データ タイプ] パラメータに [距離単位] を指定します。
-
ModelBuilder で作成された変数をこのツールで使用することはできますが、式のパラメータで使用することが必要とされる変数は [値の計算(Calculate Value)] ツールに接続できません。これらを式で使用するには、変数名をパーセント記号(%)で囲みます。たとえば、「Input」という名前の変数を 100 で除算する場合、式は「%Input%/100」になります。
注意:前の式では、「Input = 123」の場合、式は 1 を返します。小数点以下が必要な場合は、式の値に小数点と小数を追加します。たとえば、「%Input%/100.00」は 1.23 を返します。下の図は、変数を式で使用するもう 1 つの例を示しています。
注意:文字列タイプのインライン変数は、式では引用符で囲む必要があります("%string variable%")。数値タイプ(double、long)のインライン変数は、引用符で囲む必要がありません(%double%)。
-
式は、標準の Python 形式でのみ作成できます。他のスクリプト言語はサポートされていません。
-
[値の計算(Calculate Value)] ツールは、単純な数式を評価できます。例を次に示します。
- 3+5
- 9*8
- 4+(9/3)
-
[値の計算(Calculate Value)] ツールでは、Python の数学モジュールを使用して、より複雑な数学演算を実行できます。数学モジュールにアクセスするには、使用する関数の前に「math.」を付けます。例を次に示します。
- math.sqrt(25)
- math.cos(0.5)
-
定数も数学モジュールでサポートされています。例を次に示します。
- math.pi
-
arcgis.rand() 関数はサポートされています。arcgis.rand() 関数は ArcGIS ツール用に作成されたものであり、Python Rand() 関数と混同しないようにしてください。次に arcgis.rand() の使用例を示します。
- 0 から 10 までの整数の一様分布から派生したランダム値の演算:arcgis.rand("Integer 0 10")
- 平均値が 10、標準偏差が 3 の正規分布から派生したランダム値の演算:arcgis.rand("Normal 10 3")
注意:「arcgis.rand」という式は、小文字で入力する必要があります。
-
通常、式は [条件式] パラメータに入力します。複数行にわたる演算や論理演算(if- then)などのより複雑な式には、[コード ブロック] パラメータを使用する必要があります。[コード ブロック] パラメータは、単体では使用できず、[条件式] パラメータとともに使用する必要があります。
[コード ブロック] パラメータで定義されている変数は、式から参照できます。
関数は、[コード ブロック] パラメータで定義して、式から呼び出すことができます。下の例では、関数はランダムな入力値に基づいて風向の文字列を返します。Python では、関数は「def」というキーワードの後に関数の名前と関数の入力パラメータを付けて定義します。この場合、関数は「getWind」になり、「wind」という 1 つのパラメータを持ちます。値は、「return」というキーワードを使用して関数から返されます。
[条件式] パラメータに変数を渡し、下に示すようにコード ブロックでインライン変数とともに if-else ロジックを使用することができます。コード ブロックは、Input Cell Size 変数が空であるかどうかを確認してから、状況に応じて値を返します。
このツールの [条件式] パラメータでは、Python のメソッドを直接使用することができます。たとえば、入力値に小数があり(この場合は入力テーブルのフィールド値)、インライン変数置換を通じて別のツールの出力名の値を使用する場合は、[値の計算(Calculate Value)] ツールの式で Python の replace メソッドを使用することで小数を置換できます。
コード ブロックのパラメータでは、Python のモジュールを呼び出すことができ、replace などのメソッドを組み合わせたり積み上げたりすることができます。下の例では、time モジュールがコード ブロックにインポートされると、コード ブロックは「Fri Mar 19 2010 09:42:39」などのように現在の日付と時刻を返します。この戻り値は、[フォルダの作成(Create Folder)] ツールでフォルダに名前を付けるために使用されます。フォルダの名前には空白および句読点を含めることができないため、Python の replace メソッドを使用して置換します。置換する必要のある要素の数だけ、このメソッドを積み上げます。結果として生成されるこの例のフォルダの名前は、「FriMar192010094239」になります。
モデル内の値の演算を行う場合に、バッファ距離値と長さ単位を必要とする [バッファ(Buffer)] などのツールで演算処理後の値を使用する場合は、以下の操作を行う必要があります。
- コード ブロックで距離値とともに長さ単位を返す。
- 下に示すように、戻り値のデータ タイプを変更する。
- 式の結果が長さ単位の値に変換されるようにデータ タイプのパラメータを長さ単位に設定する。
-
Python では、インデントは構文の一部です。インデントのレベル(スペース 2 つまたは 4 つ)は、コード ブロック全体で統一されている限り、どちらでも問題ありません。
-
コード ブロックからモデルの変数にアクセスすることはできません。このような変数は、式からコード ブロックに渡す必要があります。これは、[コード ブロック] で定義を作成し、[条件式] ボックスでその定義を参照することで行うことができます。
Python スクリプトを作成するときは、[値の計算(Calculate Value)] ツールの代わりに標準の Python ステートメントを使用します。
構文
パラメータ | 説明 | データ タイプ |
expression |
評価される Python 式。 | SQL expression |
code_block (オプション) |
追加の Python コード。コード ブロックのコードは [条件式] パラメータで参照できます。 | String |
data_type (オプション) |
Python 式から返された出力のデータ タイプ。[値の計算(Calculate Value)] を他のツールと連結するためには、このパラメータを ModelBuilder で使用する必要があります。 | String |