ArcPy は、定評のある arcgisscripting モジュールを基礎とし、その後継となるサイト パッケージです。このパッケージの目的は、地理データ解析、データ変換、データ管理、およびマップの自動化を Python で実行するための便利で生産性の高い土台を築くことです。
ArcPy は、ジオプロセシング ツールへのアクセスだけでなく、単純または複雑なワークフローを迅速かつ簡単に作成するための追加機能、クラス、モジュールへのアクセスも提供します。
ArcPy を使用して作成された ArcGIS アプリケーションとスクリプトは、膨大な数の Python モジュールにアクセスし、操作できます。これらのモジュールは、多種多様な専門分野を持つ GIS プロフェッショナルおよびプログラマによって開発されたものです。Python 内で ArcPy を使用するもう 1 つの利点は、Python が習得しやすく使いやすい汎用プログラミング言語であるという点です。この言語はインタープリタ形式の言語であり動的な型定義を行うので、対話的環境でスクリプトをすばやくプロトタイプを作成して検証できます。大規模なアプリケーションの作成をサポートするパワフルさも兼ね備えています。
ArcPyは、ジオプロセシング ツールへのアクセスだけでなく、単純または複雑なワークフローを作成するための追加機能、クラス、モジュールへのアクセスも提供します。ArcPy は大別するとツール、関数、クラス、モジュールで構成されています。
技術的な観点では、ジオプロセシング ツールは arcpy から利用できる関数です。したがって、これらは他の Python 関数と同様にアクセスされます。ただし、混乱を避けるために、ツールとツール以外の関数 (ListFeatureClasses() のようなユーティリティ関数) は常に区別されます。
- ツールと関数のドキュメントは別々に用意されています。各ツールには、ArcGIS Desktop のヘルプ システムにそれぞれのツールのリファレンス ページが用意されています。関数のドキュメントは、ArcPy のドキュメントに用意されています。
- ツールは Result オブジェクトを返しますが、関数は返しません。
- ツールはメッセージを生成し、GetMessages() などのさまざまな関数を通して、これらのメッセージにアクセスできます。関数はメッセージを生成しません。
- ツールには、製品レベル (ArcGIS Desktop Basic、Desktop Standard、または Desktop Advanced) およびエクステンション (ArcGIS Network Analyst エクステンション、ArcGIS Spatial Analyst エクステンション など) によりライセンスが与えられます。必要なライセンス レベルは、ツールのリファレンス ページで説明されています。関数のライセンスはありません。これらは ArcPy とともにインストールされます。
ツールの実行
次の例は、[バッファー (Buffer)] ツールを実行する方法を示しています。ツールを実行すると、デフォルトで Python ウィンドウの右側のヘルプ セクションにメッセージが表示されます。
>>> arcpy.Buffer_analysis("c:/data/Portland.gdb/streets", "c:/data/Portland.gdb/steets_buffer", "500 METERS")
下記はツールを実行するもう 1 つの例です。この例では、データ管理ツールボックスと変換ツールボックスのツールを使用します。入力の道路フィーチャクラスにフィールドが追加され、そのフィールドが計算された後、フィーチャクラスはエンタープライズ ジオデータベースに読み込まれます。
>>> import arcpy
>>> arcpy.AddField_management("c:/data/Portland.gdb/streets", "LENGTH_MILES", "TEXT")
>>> arcpy.CalculateField_management("c:/data/Portland.gdb/streets", "LENGTH_MILES", "!shape.length@miles!", "PYTHON_9.3")
>>> arcpy.FeatureClassToFeatureClass_conversion("c:/data/Portland.gdb/streets", "Database Connections/MySDE.sde/PortlandDataset", "streets")
ツールからの結果の取得
ジオプロセシング ツールを実行すると、ツールの結果が Result オブジェクトに返されます。一般的に、このオブジェクトはツールによって生成または更新された出力データセットのパスです。数値やブール値などの他の値タイプを含む場合もあります。ツールの出力が複数値パラメーターである場合、値はリスト内にリストとして返すことができます。
次のコード例は、リターンを取得する方法と、リターンの内容を示しています。
出力フィーチャクラスのパスを返します。結果は他の関数の入力として使用できます。
>>> result = arcpy.Buffer_analysis("rivers", "riverBuf", "50 METERS")
>>> print result
C:\Portland\Portland_OR.gdb\riverBuf
>>> arcpy.Clip_analysis("streets", result, "streets_50m_of_rivers")
フィーチャの数を返します。
>>> result = arcpy.GetCount_management("streets_50m_of_rivers")
>>> print result.getOutput(0)
54
フィーチャクラスのデフォルト空間グリッド インデックスのリストを返します。
>>> result = arcpy.CalculateDefaultGridIndex_management("streets_50m_of_rivers")
>>> for i in range(0, result.outputCount):
... print result.getOutput(i)
...
560
200
0
環境設定の使用
ジオプロセシング環境設定は、ツールの結果に影響する追加パラメーターと考えることができます。通常のツール パラメーターとは異なり、ツールとは独立して設定され、ツールの実行時に照会および使用されます。対象エリア、出力データセットの座標系、新しいラスター データセットのセル サイズなど、すべての環境設定をツールを使って指定し、適用できます。
環境設定は、env クラスからプロパティとして使用できます。これらのプロパティを使用して、現在の環境値を取得したり、値を設定したりすることができます。次に、環境値を使用する方法の例を示します。
ワークスペース環境を設定します。
>>> arcpy.env.workspace = "c:/data/Portland.gdb"
>>> arcpy.Buffer_analysis("streets", "streetBuf", "500 METERS")
ツールのリターンに空間グリッド インデックスを設定します。
>>> arcpy.env.spatialGrid1 = arcpy.CalculateDefaultSpatialGridIndex_management("streets").getOutput(0)
現在のラスター セル サイズ設定を取得し、標準出力の正しいサイズであることを確認します。
if arcpy.env.cellSize != 30:
arcpy.env.cellSize = 30
関数の使用
関数は、特定のタスクを実行する機能を定義した小部分で、もっと大きなプログラム内に組み込むことができます。ツールに加えて、ArcPy ではジオプロセシング ワークフローのサポートを強化する多くの関数が公開されています。関数を使用して、特定のデータセットのリスト作成、データセットのプロパティの検索、データの有無の確認、ジオデータベースに追加する前のテーブル名の検証など、数多くの便利なスクリプト タスクを実行できます。
次のコード例は、データのプロパティを取得し、エクステンションをチェックアウトする方法を示しています。
import arcpy
# prints True
print arcpy.Exists("c:/data/Portland.gdb/streets")
# prints NAD_1983_StatePlane_Oregon_North_FIPS_3601_Feet
sr = arcpy.Describe("c:/data/Portland.gdb/streets").spatialReference
print sr.name
# prints Available
print arcpy.CheckExtension("spatial")
arcpy.CheckOutExtension("spatial")
クラスの使用
SpatialReference クラスや Extent クラスなどの ArcPy クラスは、ジオプロセシング ツールのパラメーターを実行するためのショートカットとしてよく使用されます。ArcPy クラスを使用しない場合、これらのパラメーターはもっと複雑な文字列が必要になります。クラスは建築の青写真と同様です。青写真には対象物の作成方法のフレームワークが示されます。クラスはオブジェクトの作成に使用できます。これは、よくインスタンス化と呼ばれます。
import arcpy
spatial_ref = arcpy.SpatialReference("Hawaii Albers Equal Area Conic")
モジュールの操作
ArcPy には、ArcGIS のその他の処理を行うためのモジュールが用意されています。ArcPy は、データ アクセス モジュール(arcpy.da)、マッピング モジュール(arcpy.mapping)、ArcGIS Spatial Analyst エクステンション モジュール(arcpy.sa)、ArcGIS Network Analyst エクステンション モジュール(arcpy.na) などのさまざまなモジュールでサポートされています。
たとえば、arcpy.sa モジュールのツールが [Spatial Analyst] ツールボックスのツールを使用し、マップ代数をサポートするように設定されている場合、arcpy.sa.Slope の実行は、[Spatial Analyst] ツールボックスから [傾斜角 (Slope)] ツールを実行する場合と同じです。