はじめに
この記事は ArcPy を使った処理の基本を紹介する「Python を使って作業の効率化を図ろう!」のシリーズ記事です。本シリーズ記事で使用するデータや関連資料は ESRI ジャパンの GitHub で公開していますので是非ご覧ください。また、本シリーズ記事では ArcGIS Desktop (ArcMap) を対象としております。
前回の記事では、ArcPy の基礎についてご紹介しました。
第 2 回目となる今回は「マップ・レイヤーの操作」についてご紹介します。
マップ ・ レイヤーの操作について
前回の記事でご紹介したように、マップを操作するためにはマッピング モジュールを使用します。
このマッピング モジュールを使用する上でまず覚えていただきたいことは、マップ ドキュメント、データ フレーム、レイヤーのオブジェクトの階層構造です。
下記の図に示した通り、マップ ドキュメント配下にデータ フレームが存在し、データ フレーム配下にレイヤーのリストが存在します。
その階層構造をたどってレイヤーのオブジェクトを取得し、いろいろな解析や地図表現を実施します。
それでは、このたどり方、「マップ ドキュメント」 > 「データ フレーム」 > 「レイヤー」という階層を念頭に置いていただきましたら、マッピング モジュールを使ったマップの操作方法をご紹介します。
マップ ドキュメントの参照
マッピング モジュールを使用してマップ ドキュメントを取得します。
前回のおさらいになりますが、マッピング モジュールを使用するには、arcpy.mapping と記述して用途に合ったメソッドを記述します。
マップ ドキュメントを参照するには、MapDocument 関数を使用することでオブジェクトの作成を行うことができます。
次の例は、MapDocument 関数を使用して ArcMap で現在開いているマップ ドキュメントのオブジェクトを作成しています。
MapDocument 関数の使い方
# “CURRENT” キーワードを使用 Mxd = arcpy.mapping.MapDocument(“CURRENT”)
MapDocument 関数はパラメータとして取得するマップ ドキュメント ファイルのパスを指定することで該当のマップ ドキュメントを参照することができます。
上記の例では、MapDocument 関数のパラメータに CURRENT キーワードを使用して現在アクティブになっているマップ ドキュメントのオブジェクトを取得しています。下記のような構成の場合は「arcpy.mxd」という名前のマップ ドキュメントが該当します。
データ フレームの参照
次に、データ フレームのオブジェクトの作成方法です。
データ フレームはマップ ドキュメントに含まれるレイヤーのコレクションです。
マップ ドキュメント オブジェクトから ListDataFrames 関数を使用してデータ フレームのリストを取得することができます。
次の例は ListDataFrames 関数を使用してマップ ドキュメント オブジェクトからデータ フレーム オブジェクトのリストを作成しています。
ListDataFrames 関数の使い方
# 先ほど作成したマップ ドキュメント オブジェクトに含まれるデータ フレームのリスト dfs = arcpy.mapping.ListDataFrames(mxd)
ListDataFrames 関数はパラメータとしてマップ ドキュメント オブジェクトを指定することで該当のオブジェクトに含まれるデータ フレームのリストを取得することができます。下記のような構成の場合は「マップレイヤー」という名前のデータ フレームが該当します。
レイヤーの参照
次に、レイヤー オブジェクトの作成方法です。
レイヤーのリストは ListLayers 関数を使用して取得することができます。
次の例は、ListLayers 関数を使用してデータ フレーム オブジェクトからレイヤー オブジェクトのリストを作成しています。
ListLayers 関数の使い方
# データ フレームに含まれるレイヤーの一覧を取得します。 Lyrs = arcpy.mapping.ListLayers(mxd, “”, dfs[0])
ListLayers 関数はパラメータとしてマップ ドキュメント オブジェクトとデータ フレーム オブジェクトを指定することで該当のオブジェクトに含まれるレイヤーのリストを取得することができます。下記のような構成の場合は赤枠で囲んだレイヤーのリストが該当します。
レイヤーの操作
次は、レイヤー オブジェクトを使った操作です。
いままで、オブジェクトの参照方法についてご説明してきました。
ここでは、実際に取得したオブジェクトを使って操作を行ってみたいと思います。
先ほどの ListLayers 関数で作成したレイヤーのリストを使ってレイヤーの表示・非表示の切り替えを行ってみたいと思います。
次の例は、レイヤー オブジェクトの Visible プロパティの値を変更してすべてのレイヤーを非表示にしています。
Visible プロパティの設定
# 表示の場合は True for lyr in lyrs: lyr.visible = False arcpy.RefreshTOC() arcpy.RefreshActiveView()
Visible プロパティはレイヤーの表示状態を制御するプロパティです。
ArcMap のコンテンツウィンドウでチェックボックスのオン・オフを切り替えた時と同じ動きをします。
※プロパティの変更後にコンテンツ ウィンドウとマップ ビューを更新しています。
このようにマップ ドキュメントからの階層構造をたどって目的のレイヤーを取得して、地図表現の変更や解析に活用することができます。
次の節ではマッピング モジュールを使ったマップ ドキュメントの出力について簡単にご説明します。
マップ ドキュメントの出力
マッピング モジュールを使うと作成した地図をファイルとして出力したり、印刷することができます。
現在、表示しているマップを出力することもできますし、あらかじめ作成したフォーマットを使用したり、データ ドリブン ページ で指定した図郭ごとに出力することも可能です。
次の 2 つの例では、「現在表示しているマップを PDF ファイルとして出力」、「データ ドリブンで指定した図郭ごとに PDF ファイルとして出力」しています。
マッピング モジュールが持つ ExportToPDF 関数の使い方(現在表示しているマップを PDF ファイルとして出力)
# すべてのオプションのデフォルト値を使用してページレイアウトを PDF 出力 arcpy.mapping.ExportToPDF(mxd, r”C:\data\output\Sample.pdf”)
ExportToPDF 関数はパラメータとしてマップ ドキュメント オブジェクトと出力する PDF ファイルのフルパスを指定することでマップを出力することができます。
マップ ドキュメントが持つ dataDrivenPages クラスのExportToPDF 関数の使い方(データ ドリブンで指定した図郭ごとに PDF ファイルとして出力)
# データ ドリブン ページで指定した図郭をページとして、1 つの PDF へ出力 mxd = arcpy.mapping.MapDocument(“CURRENT”) mxd.ataDrivenPages.exportToPDF(r”C:\data\output\DataDriven.pdf”)
dataDrivenPages クラスの ExportToPDF 関数はパラメータに PDF ファイルのフルパスを指定することでマップ ドキュメントに設定されている図郭ごとにマップを出力することができます。
おわりに
本記事では ArcPy を使ったマップ・レイヤーの操作についてご紹介しました。次回は ArcPy を使ったジオプロセシングツールの操作とデータの操作についてご紹介します。
関連リンク