本記事は ArcGIS Pro で ArcPy を使った処理の基本を紹介する「【ArcGIS Pro 版】Python を使って作業の効率化を図ろう!」のシリーズ記事です。本シリーズ記事は過去に Esri Community ブログで紹介しました、ArcGIS Desktop (ArcMap) 版の「Python を使って作業の効率化を図ろう!」シリーズ記事を ArcGIS Pro 版で再編集したものです。
第 1 回:ArcPy の基礎 (本記事)
第 2 回:マップ・レイヤーの操作
第 3 回:ジオプロセシング ツールの操作
第 4 回:データ操作
第 5 回:独自ツールの作成
ArcPy は Esri が提供する Python のサイトパッケージです。Pythonを使用して地理的データの解析、変換、管理などを実行するために提供されています。ArcPy を使うとプロパティの設定やジオプロセシング ツールの実行、マップの操作などの ArcGIS 上での一連の処理をスクリプト化し自動化することができます。また、一連の処理が記述されたスクリプトをツールに登録することでジオプロセシング ツールとして汎用的に使用することも可能です。Python や ArcPy を使うことで繰り返し作業を自動化させ、作業効率を上げることができます。
ArcPy サイトパッケージには関数、クラス、モジュールが含まれています。ArcPy を使用すると ArcGIS Pro (エクステンションを含む) のすべてのジオプロセシング ツールに Python からアクセスすることができます。また、GIS データの操作や参照に役立つさまざまな関数やクラスも使用することができます。それぞれについて簡単にご紹介します。
ArcPy ではすべてのジオプロセシング ツールに関数としてアクセスすることができます。ArcPy の関数を使用することで、ArcGIS で扱うデータセットのリスト作成、データセットのプロパティの取得、ジオデータベースに追加する前のテーブル名のチェックなど、数多くの便利なスクリプト タスクを実行できます。関数は arcpy.<関数名> で使用します。実行できるジオプロセシング ツールは、おおむね arcpy 直下に定義されています。
以下の例では、ArcGIS Pro のバッファー ツールの入出力パラメーターを定義し、ArcPyからジオプロセシング ツールに関数としてアクセスしています。
# ArcPy のインポート
import arcpy
# 入出力パラメーターの設定
station = r"C:\Data\MyProject\data.gdb\station"
output = r"C:\Data\MyProject\data.gdb\buffer"
#上で設定したパラメーターを使ってバッファーツールを実行
arcpy.Buffer_analysis(roads, output, "100 meters", "FULL", "ROUND", "NONE")
ArcPy はまとまったデータや一律に設定した値で処理を行うために “クラス” を定義しています。例えば、SpatialReference クラスでは、空間参照を指定して SpatialReference クラスをインスタンス化 (クラスのメソッドやプロパティの値を参照できる形にすること) すると、その名称などを取得することができます。
以下の例では、SpatialReferenceクラスを Webメルカトルで設定し、各プロパティを出力しています。
#SpatialReference クラスを Web メルカトル (3857) で設定
sr = arcpy.SpatialReference(3857) # arcpy.<クラス名> で使用
# 設定した SpatialReference のプロパティ (name と type) を出力
print(sr.name)
print(sr.type)
ArcPy のモジュールは、データ アクセス モジュール (arcpy.da) や、マッピング モジュール (arcpy.mp) など役割に応じたいくつかのモジュールを保有しています。マッピング モジュールは主に既存のプロジェクト (.aprx) やレイヤー ファイル (.lyr や .lyrx) のコンテンツを操作することができます。また、マッピング モジュールにはマップやレイアウトのエクスポートや印刷を自動化する関数も提供しています。使い方は arcpy.mp.<クラス名または関数名> で使用します。
データ アクセス モジュールはデータを操作するためのモジュールで、例えばフィーチャクラスやテーブルなどにアクセスして操作することができます。使い方は arcpy.da.<クラス名または関数名> で使用することができます。
その他にも ArcGIS Pro のエクステンションである、Spatial Analyst モジュール (arcpy.sa) や Network Analyst モジュール (arcpy.nax) などのモジュールも提供しています。エクステンション製品の関数やクラスのご利用は各ライセンスが必要となります。
以下の例では、マッピング モジュールを使用してArcGIS Pro のプロジェクト ファイルからレイアウトを参照し、PDFにエクスポートしています。
# ArcPy のインポート
import arcpy
# 現在開いているプロジェクトファイルを参照
aprx = arcpy.mp.ArcGISProject("CURRENT")
# プロジェクトファイルの中のレイアウトを検索し取得
lyt = aprx.listLayouts("レイアウト")[0]
# PDFにエクスポート
lyt.exportToPDF(r"C:\Data\output\export.pdf")
Note:ArcGIS Desktop でのマッピング モジュールと ArcGIS Pro でのマッピング モジュールでは使用方法が異なります。詳細については arcpy.mapping から ArcGIS Pro への移行も併せてご参照ください。
ここまで ArcPy のサイトパッケージとして、関数やクラス、モジュールについてご紹介しました。import arcpy と記述することで、Python は ArcPy を読み込み、これまでにご紹介した関数、クラス、モジュールを Python から呼び出して実行することができるようになります。
※ArcGIS Pro の Python ウィンドウを利用する場合、インポートしなくても ArcPy を利用できます。
本記事では ArcGIS Pro で ArcPy を使った処理の基本を紹介するシリーズ記事の第一弾として ArcPy の基礎についてご紹介しました。ArcPy を使用することで、繰り返し作業の自動化ができ、作業効率を上げることができます。また、処理に条件分岐を加えることや、専用の GIS アプリケーションを起動せずとも GIS 処理を実行することができます。
GISの処理の自動化を検討している方は、ぜひご活用ください。
次回は ArcPy を使ったマップやレイヤーの操作方法についてご紹介する予定です。
ESRIジャパン Web サイト
Esri 社 (米国) Web サイト
ArcGIS 開発者コミュニティ
・Python を使って作業の効率化を図ろう!(ArcMap版)
【ArcGIS Pro 版】Python を使って作業の効率化を図ろう!シリーズ リンク集
第二回:マップ・レイヤーの操作
第三回:ジオプロセシングツールの操作
第四回:データ操作
第五回:独自ツールの作成