この記事は、ArcPy を使った処理の基本を紹介する「Python を使って作業の効率化を図ろう!」のシリーズ記事です。本シリーズ記事で使用するデータや関連資料は ESRI ジャパンの GitHub で公開していますので是非ご覧ください。
※ 本シリーズ記事では ArcPy の実行環境として ArcGIS Desktop (ArcMap) を対象としております。
ArcGIS Pro を対象とした記事は「【ArcGIS Pro 版】Python を使って作業の効率化を図ろう!① : ArcPy の基礎」 をご参照ください。
第 1 回:ArcPy の基礎 (本記事)
第 2 回:マップ・レイヤーの操作
第 3 回:ジオプロセシング ツールの操作
第 4 回:データの操作
第 5 回:独自のツールの作成方法
第 6 回:アドインの作成方法
第 1 回目となる今回は、ArcPy の基礎についてご紹介します。
ArcPy は Esri が提供する Python のサイトパッケージです。Python スクリプトを使って地理的データの解析、変換、管理などを実行するために提供されています。ArcPy を使うとプロパティの設定やジオプロセシング ツールの実行、マップの操作などの ArcGIS 上での一連の処理をスクリプト化し自動化することができます。また、一連の処理が記述されたスクリプトをツールに登録することでジオプロセシング ツールとして汎用的に使用することも可能です。Python や ArcPy を使うことで繰り返し作業を自動化させ、作業効率を上げることができます。
ArcPy サイトパッケージは関数、クラス、モジュールがあります。ArcPy サイトパッケージを使用すると ArcGIS Desktop (エクステンションを含む) のすべてのジオプロセシング ツールに Python からアクセスすることができます。また、GIS データの操作や参照に役立つさまざまな関数やクラスも使用することができます。それぞれについて簡単にご紹介します。
ArcPy ではすべてのジオプロセシング ツールが関数として提供されています。関数を使用すれば、ArcGIS で扱うデータセットのリスト作成、データセットのプロパティの取得、ジオデータベースに追加する前のテーブル名の検証など、数多くの便利なスクリプト タスクを実行できます。関数は arcpy.<関数名> で使用します。
次の例は GetParameterAsText 関数を使用してパラメータの入力値を受け取り、Exists 関数を使用して入力の有無を判別しています。
関数の使い方
# GetParametrAsText でパラメータの入力値を受け取る input = arcpy.GetParameterAsText(0) # arcpy.<関数名> で使用 # Exists で入力の有無を判別 if arcpy.Exists(input): print("Data exists") else: print("Data does not exist")
ArcMap から実行できるジオプロセシング ツールは、おおむね arcpy 直下に定義されています。
関数と見分けがつきにくいですが、ArcPy もまとまったデータや一律に設定した値で処理を行うために “クラス” を定義しています。例えば、SpatialReference クラスでは、空間参照を指定して SpatialReference クラスをインスタンス化 (このクラスのメソッドやプロパティの値を参照できる形) すると、その名称などを取得することができます。
次の例では、SpatialReference (空間参照) クラスの設定を行っています。
クラスの使い方
# 空間参照クラスを Web メルカトル (3857) で設定 spref = arcpy.SpatialReference(3857) # arcpy.<クラス名> で使用 # 設定した SpatialReference のプロパティ (name と type) を出力 print(spref.name) print(spref.type)
ArcPy のモジュールは、データ アクセス モジュール (arcpy.da) や、マッピング モジュール (arcpy.mapping) など役割に応じたいくつかのモジュールを保有しています。マッピング モジュールは主に既存のマップ ドキュメント (.mxd) やレイヤー ファイル (.lyr) の内容を操作することができます。また、マップのエクスポートや印刷を自動化する機能も提供しています。使い方は arcpy.mapping.<クラス名または関数名> で使用します。
データ アクセス モジュールはデータを扱う振る舞いを提供するモジュールで、例えばフィーチャクラスやデータビューなどにアクセスして操作を行うことができます。使い方は arcpy.da.<クラス名> で使用することができます。
その他にもエクステンションである、Spatial Analyst モジュール (arcpy.sa) や Network Analyst モジュール (arcpy.na) などのモジュールも保有しています。
※エクステンション製品の関数やクラスをすでに保有していますが、ご利用は各ライセンスが必要となります。
次の例ではマッピング モジュールを使ってマップ ドキュメントを参照し、PDF に出力しています。
モジュールの使い方
# arcpy.<モジュール名>.<クラス名または関数名> で使用 # マップ ドキュメントの参照 mxd = arcpy.mapping.MapDocument(r“C:\data\ArcMap\arcpy.mxd“) # PDF ファイルにエクスポート arcpy.mapping.ExportToPDF(mxd, r“C:\data\output\sample.pdf“)
ArcPy のサイトパッケージをインポートすることで ArcPy を使用することができます。コードに import arcpy と記述することで、Python は ArcPy を読み込み、これまでにご紹介した関数、クラス、モジュールを Python から呼び出して実行することができます。ArcMap の Python ウィンドウを利用する場合はインポートが不要です。
次の例は ArcPy を使ってマップの操作を行い、レイヤー名の一覧を出力しています。
# arcpy のインポート import arcpy # ArcMapで現在開いているマップ ドキュメントを取得 mxd = arcpy.mapping.MapDocument(“CURRENT”) # 現在のデータフレームのレイヤー一覧を取得 lyrs = arcpy.mapping.ListLayers(mxd) # レイヤーの一覧を出力 for lyr in lyrs: print lyr.name >> レイヤー名 1 >> レイヤー名 2
本記事では ArcPy の基礎についてご紹介しました。次回は ArcPy を使ったマップとレイヤーの操作についてご紹介します。