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

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

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

論理ツール

論理ツールは、モデル内のプロセス フローを制御し、if-then-else 分岐論理を有効化します。

論理ツール説明

座標系

指定された座標系の入力データを評価します。

データの存在

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

データ タイプ

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

指定した Python 式が True または False であるかどうかを評価します。

フィーチャ タイプ

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

フィールドの存在

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

フィールド値

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

行数

入力データの行数を評価して、指定した値と一致するかどうかをチェックします。

選択の存在

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

空間リレーションシップ

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

値の評価

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

ブランチのマージ

複数の論理分岐を 1 つの出力にマージします。

停止

入力値が True または False に設定されたときに、反復処理中のモデルを終了します。一連の入力値に対して、すべての入力が True の場合は反復処理を続行し、入力のいずれかが False の場合は反復処理を停止します。機能的には [While] ツールと同じですが、モデルですでに [While] 反復子が使用されていて反復子をこれ以上追加できない場合に、モデルを停止するのに役立ちます。

ModelBuilder で論理ツールを使用する方法の詳細

Python

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

条件の理解

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

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

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

データの存在の例

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

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

座標系の例

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

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

フィーチャ タイプの例

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

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

フィールド値の例

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

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

選択の存在の例

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

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

値の評価の例

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

[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. 条件の理解