Python コード例(その5):ModelBuilder で Python の “If 文” を使用する

ArcGIS には Python を使用して、データ解析、データ変換、データ管理等の処理を自動化することができます。これによって様々な作業の効率化を実現することができます。今回のブログでは if-else 条件式を Python を使って ArcGIS Desktop の ModelBuilder 上で実行する方法をご紹介します。

if-else 条件式は各状況に応じて様々な機能を果たす非常に簡単で有用な構文です。
そして、if-else 条件式とは次のように構成されます:

if 条件式,
条件式が真の時に実行する処理;
else;

条件式が偽の時に実行する処理

では、if-else 条件式を使った一例を紹介します。

<例: 製品ライセンス チェック>
ArcView や ArcInfo などの製品ライセンス レベルによって、使用できるジオプロセシング ツールは異なります。
例えば、ArcInfo では [イレース] ツールが使用できますが、ArcView では使用できません。そのため、ArcView で [イレース] ツールと同様の結果を出すには、複数のツールを使用しなければなりません(図1)。

複数の製品(ArcView、ArcInfo など)を所有している組織で、使用している製品に関係なく同等の処理結果が求められるようなモデルを作成したい場合(つまり、モデルの中でライセンスの有効性を判定して実行するツールを使い分ける場合)、 [値の計算] ツールに if 文を使用したコードを設定することが最も手軽な方法です。

ここでは、Python を使用して、ArcInfo ライセンスの有効性を [値の計算] ツールでチェックし、有効な場合と無効な場合の処理の違いについて紹介します(図1)。[値の計算] ツールがブール型の場合、定義された関数に基づいて True または False のどちらかで評価され、戻り値として返されます。

図1:ArcInfo ライセンスが無効な場合と有効な場合の処理フローを表すモデル

1_6

では、Python を利用した if 文を使って、上記のモデルの処理を実行します(図2)。
① ArcInfo ライセンスが有効の場合に [イレース] ツールを使用する場合

② ArcInfo ライセンスが無効の場合に [イレース] ツールと同様の処理結果を多数のツールを使用して出力する場合

図2: Python のサンプルコード

2

[値の計算] ツールに Python による if-else コードを組み込みます。この例では、ArcPy ProductInfo 関数を使用して製品ライセンスの有効性を確認します。そして if 条件式をもとにブール型出力パラメータで真偽判定をします。

図2のコードを使って、 図1のモデルを実行し、マップに追加すると、ArcMap 上でそれぞれの処理結果がマップに追加されます(図3)。

図3:ArcInfo ライセンスが有効な場合(①)と無効な場合(②)に使用したツールの
処理結果

3

このように Python を使って if-else 文のコードを組み込むだけで、手軽に条件分岐が作成でき、処理ワークフローを効率化させることができます。他にも if-else 文はエクステンションの有無やフィーチャ クラスの有無、フィーチャ タイプの判定にも利用できます。このような作業にも是非 Python をご使用ください

[注意事項]

本記事に関するご質問は、保守 Q&A サポート サービス以外の有償サービスにて対応いたします。本記事に関して生じたいかなる損害についても、弊社では責任を負いかねますことを予めご了承願います。

参考ヘルプ:
ユニオン(解析)
イレース(解析)

■関連リンク
Python コード例(その2):時系列マップをPDF に出力する方法
Python コード例(その3):フィールド演算を使用して昇順で ID を割り当てる方法
Python コード例(その4):ArcPy で Geometry オブジェクトを使用する方法
Python コード例(その5):ModelBuilder で Python の “If 文” を使用する