ArcPy の概要

ArcPy は、定評のある arcgisscripting モジュールを基礎とし、その後継となるサイト パッケージです。このパッケージの目的は、地理データ解析、データ変換、データ管理、およびマップの自動化を Python で実行するための便利で生産性の高い土台を築くことです。

ArcPy により、ジオプロセシング ツールへのアクセスだけでなく、単純または複雑なワークフローを迅速かつ簡単に作成するための追加機能、クラス、モジュールへのアクセスも提供されます。

ArcPy を使用して作成された ArcGIS アプリケーションとスクリプトは、膨大な数の Python モジュールにアクセスし、操作できます。これらのモジュールは、多種多様な専門分野をもつ GIS プロフェッショナルおよびプログラマによって開発されたものです。Python 内で ArcPy を使用することのもう 1 つの利点は、Python が習得しやすく使いやすい汎用プログラミング言語であるという点です。この言語はインタープリタ形式の言語であり動的な型付けを行うので、インタラクティブ環境でスクリプトをすばやくプロトタイプを作成して検証できます。大規模なアプリケーションの作成をサポートするパワフルさも兼ね備えています。

ArcPy により、ジオプロセシング ツールへのアクセスだけでなく、単純または複雑なワークフローを作成するための追加機能、クラス、モジュールへのアクセスも提供されます。ArcPy は大別するとツール、関数、クラス、モジュールで構成されています。

技術的な観点では、ジオプロセシング ツールは arcpy から利用できる関数です。したがって、これらは他の Python 関数と同様にアクセスされます。ただし、混乱を避けるために、ツールとツール以外の関数(ListFeatureClasses() のようなユーティリティ関数)は常に区別されます。

注意注意:
ArcPy サイトパッケージは Python 2.7 を基に構築されており、正しくインポートするにはこのバージョンが必要です。

ツールの実行

次の例は、[バッファ(Buffer)] ツールを実行する方法を示しています。ツールを実行すると、デフォルトで Python ウィンドウの右側のヘルプ セクションにメッセージが表示されます。

>>> arcpy.Buffer_analysis("c:/data/Portland.gdb/streets", "c:/data/Portland.gdb/steets_buffer", "500 METERS")

下記はツールを実行する別の例です。この例では、データ管理ツールボックスと変換ツールボックスのツールを使用します。入力の道路フィーチャクラスにフィールドが追加および計算された後、フィーチャクラスは ArcSDE エンタープライズ ジオデータベースに読み込まれます。

>>> 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")
Python でのツールの使用の詳細

ツールからの結果の取得

ジオプロセシング ツールを実行すると、ツールの結果が 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
Python での環境設定の使用の詳細

関数の使用

関数は、特定のタスクを実行する機能を定義した小部分で、もっと大きなプログラム内に組み込むことができます。ツールに加えて、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")
Python での関数の使用の詳細

クラスの使用

SpatialReference クラスや Extent クラスなどの ArcPy クラスは、ジオプロセシング ツールのパラメータを実行するためのショートカットとしてよく使用されます。ArcPy クラスを使用しない場合、これらのパラメータはもっと複雑な文字列が必要になります。クラスは建築の青写真と同様です。青写真には対象物の作成方法のフレームワークが示されます。クラスはオブジェクトの作成に使用できます。これは、よくインスタンス化と呼ばれます。

import arcpy

spatial_ref = arcpy.SpatialReference("Hawaii Albers Equal Area Conic")
Python でのクラスの使用の詳細

モジュールの操作

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)] ツールを実行する場合と同じです。

関連トピック

4/26/2014