本記事は ArcGIS Pro で ArcPy を使った処理の基本を紹介する「【ArcGIS Pro 版】Python を使って作業の効率化を図ろう!」のシリーズ記事です。本シリーズ記事は過去に Esri Community ブログで紹介しました、ArcGIS Desktop (ArcMap) 版の「Python を使って作業の効率化を図ろう!」シリーズ記事を ArcGIS Pro 版で再編集したものです。
前回の記事では、ArcPy の基礎についてご紹介しました。第 2 回目となる今回は「マップ・レイヤーの操作」についてご紹介します。
前回の記事でご紹介したように、ArcGIS Pro のマップを操作するためにはマッピング モジュールを使用します。マッピング モジュールを使用するうえで重要なことは、ArcGIS Pro のプロジェクト ファイル、マップ、レイヤーのオブジェクトの階層構造です。
以下の図に示すように、プロジェクト ファイル配下にマップが存在し、マップ配下にレイヤーのリストが存在します。
この階層構造をたどってレイヤーのオブジェクトを取得し、さまざまな解析の実施や地図表現の操作をすることができます。
「プロジェクト ファイル」 > 「マップ」 > 「レイヤー」という階層を念頭に置いていただきましたら、ここからはマッピング モジュールを使ったマップやレイヤーの操作方法をご紹介します。
マッピング モジュールを使用してプロジェクト ファイルを取得することができます。前回の記事でモジュールの使い方についても少しご紹介しましたが、マッピング モジュールは arcpy.mp <クラス名・関数名> で使用することができます。プロジェクト ファイルの取得は下記のようにマッピング モジュールの ArcGISProject クラスを使用します。パラメーターとしてプロジェクト ファイル (.aprx) のパスを指定することで、取得することができます。また、CURRENT キーワードを使用することで、現在開いているプロジェクト ファイルを取得することも可能です。
# 現在開いているプロジェクトファイルを取得
aprx = arcpy.mp.ArcGISProject("CURRENT")
次にマップの取得方法を紹介します。マップはプロジェクト ファイルに含まれるオブジェクトです。下記のように取得したプロジェクト ファイルから listMaps メソッドを使用してマップ一覧を取得することができます。listMaps を実行するとリスト型で結果が返ってくるので、下記の例のように最後にインデックス番号 [0] を指定すると、リストの先頭のマップを取得できます。
# プロジェクト ファイルのマップを取得
map = aprx.listMaps(“マップ")[0]
次にレイヤーの取得方法を紹介します。レイヤーは Map クラスに含まれる listLayers メソッドを使用します。下記のように取得したマップ オブジェクトから listLayers メソッドを呼び出して使用します。listLayers も listMaps と同様に実行結果がリスト型で返却されるので、取得したいレイヤー名やインデックス番号を指定すると、レイヤー オブジェクトを取得できます。下記のように何も指定しない場合はレイヤーの一覧をリスト型として取得できます。
# マップに含まれるレイヤーの一覧 (リスト) を取得
lyrs =map.listLayers()
ここまで、プロジェクトファイルの階層をたどり、レイヤー オブジェクトの取得までご紹介してきました。
ここでは取得したレイヤーの操作の例として、レイヤーの表示・非表示について紹介します。Layer クラスの visible プロパティを TrueまたはFalseに設定することで、レイヤーを表示または非表示にすることが可能です。
レイヤーの表示設定までの全体のコードは下記のようになります。
# ArcPyをインポート
import arcpy
# プロジェクト ファイルのオブジェクト取得
aprx = arcpy.mp.ArcGISProject("current")
# マップのオブジェクト取得
maps = aprx.listMaps()[0]
# レイヤーのオブジェクト取得
lyrs =maps.listLayers()
# レイヤーの数だけ繰り返し
for lyr in lyrs:
# レイヤーの表示設定
lyr.visible = True
マッピング モジュールは他にも ArcGIS Pro で作成したレイアウトを出力することも可能です。マップと同様に ArcGISProject クラスにレイアウトを取得するための listLayout メソッドが提供されています。使い方も listMaps メソッドと同様に下記のように記述します。
パラメーターには文字列を指定することができ、レイアウト名を入力して特定のレイアウトのリストを取得することも可能です。何も指定しない場合はプロジェクト ファイルに含まれるレイアウトすべてのリストを取得します。下記の例ではレイアウト名は何も指定せず、後ろにインデックス番号 [0] を記述することでリストの先頭のレイアウトのみを取得しています。
# 現在開いているプロジェクトファイルを取得
aprx = arcpy.mp.ArcGISProject(“CURRENT")
# レイアウトのオブジェクトを取得
layout = aprx.listLayouts()[0]
取得したレイアウトは MapView クラスの exportToPDF などの exportTo○○ メソッドを使用してさまざまな形式に出力することができます。下記の例では、exportToPDF メソッドを使用して、取得したレイアウトから PDF へエクスポートします。パラメーターには出力先となるパスやファイル名を指定します。
aprx = arcpy.mp.ArcGISProject(“CURRENT")
layout = aprx.listLayouts()[0]
# PDFへエクスポート
layout.exportToPDF(r"C:\data\output\Sample.pdf")
今回は例として PDF 形式で出力するメソッドを使用しましたが、他にも JPEG 形式で出力できる exportToJPEG メソッドなど、さまざまな形式で出力することができるメソッドが提供されています。また、Python の繰り返し処理を使用することで、ArcGIS Pro のマップ シリーズで設定した図郭ごとに出力するといった使い方も可能です。
本記事では ArcGIS Pro で ArcPy を使った処理の基本を紹介するシリーズ記事の第二弾として ArcPyを使った ArcGIS Pro のマップやレイヤーの操作方法についてご紹介しました。今回紹介したプロジェクト ファイル、マップ、レイヤーといった階層をたどり、レイヤー オブジェクトを取得すると、そのレイヤーを使用してさまざまな GIS の解析や地図の表現を行うことができますので、ぜひご活用ください。
次回は ArcPy を使ったジオプロセシングツールの操作についてご紹介する予定です。
ESRIジャパン Web サイト
Esri 社 (米国) Web サイト
ArcGIS 開発者コミュニティ
・Python を使って作業の効率化を図ろう!(ArcMap版)
【ArcGIS Pro 版】Python を使って作業の効率化を図ろう!シリーズ リンク集
第一回:ArcPy の基礎
第三回:ジオプロセシングツールの操作
第四回:データ操作
第五回:独自ツールの作成