Python とジオプロセシング

Python は ArcGIS のスクリプト言語です。 ArcGIS には ArcPy という Python API があります。これにより、GIS タスクの自動化に役立つすべてのジオプロセシング ツールと追加の関数およびクラス、専用モジュールにアクセスできます。 ArcPy を使用するスクリプトは、Python の標準およびサード パーティのライブラリを通じて提供される多種多様な機能と組み合わせて記述できます。 Python のコマンドとスクリプトは、ArcGIS NotebooksPython ウィンドウスクリプト ツールを使用して実行できます。また、ArcGIS Pro の外部Python を実行することもできます。 Python の実行方法にかかわらず、コマンドは基本的に同じように動作し、同じジオプロセシング ツールが使用されます。

次に、ArcPy を使用する簡単なジオプロセシング スクリプトを示します。

import arcpy

roads = "c:/base/data.gdb/roads"
output = "c:/base/data.gdb/roads_Buffer"

# Run Buffer
arcpy.analysis.Buffer(roads, output, "100 Feet")

ツール パラメーターの設定

各ジオプロセシング ツールには、ツールを実行するために必要な情報を提供する固定のパラメーターがあります。 ツールを Python で使用する際、スクリプトの実行時にツールを実行するには、ツールのパラメーター値が正しく設定されていなければなりません。 有効なパラメーター値が指定されれば、ツールを実行する準備は完了です。 ほとんどのパラメーターは文字列として指定できます。 一部の複雑なパラメーターはオブジェクトとして指定可能で、長い文字列を使用するよりも簡単に操作できます。

文字列はテキストであり、データセットへのパスやキーワードといったパラメーター値を一意に識別します。 次のコード例では、[バッファー (Buffer)] ツールの入出力パラメーターが定義されています。 ツール名にはツールボックス エイリアスが付加されることに注意してください。 この例では、ツールの呼び出しを読みやすくするために、入出力パラメーターの定義に 2 つの文字列変数が使用されています。

ほとんどのジオプロセシング ツールには、必須の引数とオプションの引数が含まれています。 オプションの引数は、それほど多く指定せずに済む場合がほとんどです。 これらの使用しない引数の扱い方には、2 つの方法があります。 1 つ目の方法は、オプションの引数の順序は変えず、必要のない引数は空の文字列 ""、シャープ記号 "#" として参照するか、None を付けて参照します。

import arcpy
arcpy.management.AddField("schools", "school_id", "LONG", "", "", "", "", "NON_NULLABLE")
2 つ目の方法は、キーワード引数を使用する方法で、引数名を使用して値を割り当てます。 キーワード引数を使用すると、使用しないオプションの引数を省略したり、順序を変えて指定したりできます。

import arcpy
arcpy.management.AddField("schools", "school_id", "LONG", field_is_nullable="NON_NULLABLE")

ツールの出力

ArcPy は、ツールの出力値を Result オブジェクトとして返します。 Result オブジェクトには、ツールの実行に関する情報 (メッセージ、パラメーター、出力データセットのパスと値など) が含まれます。 これらの結果は、他のツールがいくつか実行された後でも維持できます。

次の例では、ジオプロセシング ツールの実行後に Result オブジェクトから出力を取得する方法を示しています。

import arcpy

arcpy.env.workspace = "c:/city/data.gdb"

# Geoprocessing tools return a Result object 
result = arcpy.management.CopyFeatures("roads", "urban_roads")

# A print function will display the string representation of the output.
print(result)

# A Result object can be indexed to get the output value.
result_value = result[0]

大きなワークフローの中間段階だけで使用する出力を作成する場合、出力引数を省略して、ツールが出力用の一意のパスと名前を作成することができます。 これには、出力を "#"None に設定するか、出力が最後の引数の場合は完全に省略します。 どちらの場合も、戻り値は新しいデータ ソースへの絶対パスになります。

import arcpy
arcpy.env.workspace = "c:/city/data.gdb"

result = arcpy.management.CopyFeatures("roads", "#")

ジオプロセシング ワークフローの構築

ArcPy に用意されているさまざまなクラスと関数は、ツールを順番に実行するだけでなく、ジオプロセシング スクリプトを独自に構築する際にも役立ちます。 これらの関数を使用して、バッチ処理を実行する特定のデータセットのリスト表示、プロパティをプログラムで読み取るためのデータセットの説明、またはその他の多くの有効なジオプロセシング タスクの実行が可能です。

ArcPy 関数を使用したジオプロセシング スクリプトの構築の詳細