if-then-else による分岐と論理ツール

if-then-else 論理は、さまざまな条件に基づいて処理を実行するための強力な概念です。if-then-else 論理は、「条件が true の場合はある処理を実行し、true でなければ別の処理を実行する」のように説明できます。

ModelBuilder では、組み込み論理ツールのセットを使用するか、Python カスタム関数またはスクリプト ツールで if-then-else 論理を追加できます。

論理ツール

論理ツールは、モデル内のプロセス フローの制御に役立ち、if-then-else 分岐論理を有効化する ModelBuilder ユーティリティのカテゴリです。

ユーティリティ説明

データの存在 (If Data Exists)

指定されたデータが存在するかどうかを評価します。

フィールドの存在 (If Field Exists)

入力データに指定したフィールドがあるかどうかを評価します。

選択セットの存在 (If Selection Exists)

入力データに選択があり、いくつかのレコードが選択されているかどうかを評価します。

座標系 (If Coordinate System Is)

入力データに指定した座標系が含まれるかどうかを評価します。

データ タイプ (If Data Type Is)

入力データが指定したデータ タイプと一致するかどうかを評価します。

フィーチャ タイプ (If Feature Type Is)

フィーチャクラスが指定したフィーチャ タイプであるかどうかを評価します。

フィールド値 (If Field Value Is)

属性フィールドの値が指定した値、条件式、または 2 つ目のフィールドと一致するかどうかを評価します。

行数 (If Row Count Is)

入力データの行数が指定した値と一致するかどうかを評価します。

空間リレーションシップ (If Spatial Relationship Is)

入力に指定した空間リレーションシップがあるかどうかを評価します。

値の評価 (If Value Is)

定義された比較演算子を使用して入力値を単一の値、値のリスト、または値の範囲に対して評価します。

ブランチのマージ (Merge Branch)

[ブランチのマージ] ツールは、複数の論理分岐を 1 つの出力にマージします。

停止 (Stop)

すべての入力値が指定した true または false の条件を満たした場合、反復処理を停止します。機能的には [While] 反復子と同じですが、モデルですでに [While] 反復子が使用されていて反復子をこれ以上追加できない場合に、モデルを停止するのに役立ちます。

ModelBuilder での論理ツールの使用の詳細

Python

ModelBuilder の組み込み論理ツールに加えて、[値の計算] ツールで Python カスタム関数を使用して if-then-else 分岐を実行する独自の関数またはツールを作成できます。これらの関数は、さまざまな Arcpy および他の Python 機能を使用し、条件をテストしてブール型 (true および false) の変数を出力できます。同様に、条件をテストしてブール型 (true および false) の変数を出力する Python スクリプトを作成し、作成したスクリプトをジオプロセシング スクリプト ツールに設定して、モデルに追加することもできます。

条件の理解

システム ツールから選択する前、またはカスタム スクリプトを書き込む前に、ベクター データ タイプやラスター データ タイプに基づいた条件付きロジックを理解しておくことをお勧めします。

ファイルの存在時のみのモデルの実行

次の例は、[データの存在 (If Data Exists)] ツールを使用して、特定のワークスペース内のデータの存在を確認し、データが存在しないときは、モデル内で次のツール [フィールドの追加 (Add Field)] の実行を続けます。データが存在しないときは、フィールドを追加する前に、バックアップ場所からフィーチャクラスをコピーします。

[データの存在 (If Data Exists)] の例

入力に特定の座標系がある場合のみのモデルの実行

次の例は、[座標系 (If Coordinate System Is)] ツールを使用して、入力フィーチャクラスの [座標系][GCS_WGS_1984] であるかどうかを確認します。ブール型出力が [False] の場合は、モデルが [投影変換 (Project)] ツールを使用して入力フィーチャクラスを [GCS_WGS_1984] に投影します。

[座標系 (If Coordinate System Is)] の例

入力フィーチャクラスが特定のジオメトリ タイプの場合のみのモデルの実行

次の例は、[フィーチャ タイプ (If Feature Type Is)] ツールを使用して、入力のフィーチャ タイプが [ポイント] であるかどうかを確認します。ブール型出力が [True] の場合は、次のツール [ロケーションの追加 (Add Locations)] を実行します。ブール型出力が [False] の場合は、[ロケーションの追加 (Add Locations)] を実行する前に、入力を [フィーチャ → ポイント (Feature to Point)] で変換します。[ブランチのマージ (Merge Branch)] ツールは、[True] 分岐と [False] 分岐をマージし、[解析の実行 (Solve)] ツールをいずれかの分岐に対して実行できるようにします。

[フィーチャ タイプ (If Feature Type Is)] の例

条件に基づくフィールド値の変更

次の例は、[フィールド値 (If Field Value Is)] ツールを使用して、入力フィーチャクラスに Type フィールド値が「A」に等しいレコードがあるかどうかを確認します。ブール型出力が [True] の場合は、[属性検索 (Select Layer By Attributes)] ツールを使用してタイプ「A」フィーチャを選択し、[フィールド演算 (Calculate Field)] ツールを使用して Description フィールド値を変更します。

[フィールド値 (If Field Value Is)] の例

SQL クエリの結果が選択したフィーチャになる場合のみのモデルの実行

次の例は、[選択セットの存在 (If Selection Exists)] ツールを使用して、入力フィーチャクラスに選択フィーチャがあるかどうかを確認します。ブール型出力が [True] の場合は、[フィールド演算 (Calculate Field)] ツールを使用して Description フィールドの値を計算します。ブール型出力が [False] の場合は、[属性検索 (Select Layer By Attribute)] ツールを使用して選択を行ってフィールド値を変更します。

[選択セットの存在 (If Selection Exists)] の例

入力が特定のデータ タイプの場合のみのモデルの実行

次の例では、[パスの解析 (Parse Path)] ツールを使用して、ファイル拡張子を取得します。[値の評価 (If Value Is)] ツールは、拡張子が [値] パラメーターに一致するかどうかを確認します。モデルは、*.tif 拡張子のラスター データだけをコピーします。

[値の評価 (If Value Is)] の例

ラスターのブール演算の実行

[Test][Con][Greater Than]、および [ラスター演算 (Raster Calculator)] ツールは、ラスターのブール演算の実行に使用できます。以下の例では、セル値が 2000 より大きければ 1 に設定され (True)、大きくなければ 0 に設定されます (False)。

ラスターの True または False の演算

ラスターの条件評価の実行

[Con] または [ラスター演算 (Raster Calculator)] ツールは、ラスターの条件評価に使用できます。 以下の例では、セル値が 2000 より大きければ入力値を維持し、大きくなければ NoData に設定します。[Con] ツールで [条件式が FALSE のときの入力ラスター、または定数値] パラメーターを空のままにすると、値が NoData に設定されます。必要に応じて、[条件式が FALSE のときの入力ラスター、または定数値] パラメーターに別のラスターまたは定数値を指定できます。

ラスターの if/else 条件評価

クエリによるラスターからのセルの抽出

[属性で抽出 (Extract by Attributes)][ラスター レイヤーの作成 (Make Raster Layer)]、および [属性検索 (Select Layer By Attribute)] ツールは、ラスターからセルを抽出するために使用できます。次の例は、セル値が 2000 より大きいラスターまたはラスター レイヤーを作成する方法を示しています。

クエリに基づくラスター抽出

クエリによるラスターからのセルの抽出と NoData の設定

[Set Null][再分類 (Reclassify)]、および [ラスター演算 (Raster Calculator)] ツールは、ラスターからセルを抽出して NoData に設定するために使用できます。セル値が 2000 より大きければ NoData に設定して、大きくなければ入力データ値を使用します。

ラスターは、セル値を NoData に設定します。

クエリによるラスターからの NoData セルの抽出と変更

[Is Null)] ツールと [Con] ツールまたは [ラスター演算 (Raster Calculator)] ツールは、ラスターから NoData セルを抽出して変更するために使用できます。以下の例では、セル値が NoData であれば 0 に設定して、NoData でなければ入力データ値を使用します。

変更 NoData セルの値を変更します。

ラスター プロパティが特定の条件に一致する場合のみのモデルの実行

たとえば、セルの平均値が 100 より大きいかどうかを確認するには、[ラスター プロパティの取得 (Get Raster Properties)][値の評価 (If Value Is)] ツールを使用できます。

条件に基づくモデルのツールの実行の続行または停止

[While] および [停止 (Stop)] ツールは、条件に基づいてモデルの続行または停止をするために使用できます。


このトピックの内容
  1. 論理ツール
  2. Python
  3. 条件の理解