GISコミュニティフォーラム開催報告:Web GIS で集めたデータをArcGIS Pro でも活用しよう!~レポート作成までのステップ~

Document created by makoto_maruyamaesrij-esridist Employee on Jun 19, 2019
Version 1Show Document
  • View in full screen mode

はじめに

2019年 5 22 () 24 ()、東京ミッドタウン 六本木にて第 15 回 GIS コミュニティフォーラム及びプレフォーラム・セミナーが開催されました!

公開可能なセッションの発表資料は ESRIジャパンのサポート サイトで公開しております。また、GeoNetブログでは開発者向けのセッションで使用したコードなどを順次ご紹介していきます。発表資料や GeoNet記事、GitHub へのリンクなどの詳細は第 15 回 GIS コミュニティフォーラム開催報告記事をご覧ください。

 

本記事ではテクニカル セッション「Web GIS で集めたデータを ArcGIS Pro でも活用しよう!~レポート作成までのステップ~」のデモで使用した Python のコードに加え、セッションではご紹介しきれなかったアタッチメントの画像を一括出力するコードをご紹介します。

 

概要

Survey 123 for ArcGISCollector for ArcGIS などを使って現地調査で集めた Web GIS のデータは、どのように ArcGIS Pro で活用できるでしょうか?

集めたデータを ArcGIS Pro で解析し、データの傾向を見出すことに活用する、レイアウト機能を使用して調査結果や解析結果をもとにレポートを作成する・・・などといった活用方法があります。本記事では Web GIS のデータから ArcGIS Pro でレポート作成する手助けとなる以下の Python を用いた 3 つの処理をご紹介します。

  1. ArcGIS Online のフィーチャ サービスをダウンロード
  2. ArcGIS Pro で設定したレイアウトを PDF にエクスポートし、別の PDF と結合
  3. アタッチメント テーブルからアタッチメントの画像を一括出力

 

 

 

1ArcGIS Online のフィーチャ サービスをダウンロード

Survey123 for ArcGIS や Collector for ArcGIS などで集めた現地調査のデータを ArcGIS Pro で活用するために、ArcGIS Online 上のフィーチャ サービスを ArcGIS Pro にダウンロードします。

 

ArcGIS Online での操作

① ArcGIS Online にサイン イン
② [コンテンツ] を開き、添付ファイル付きのフィーチャ サービス (Feature Layer) をクリックし、アイテム詳細ページを表示

③ アイテム詳細ページから [エクスポート] → [FGDB にエクスポート] をクリック

 

④ エクスポートしたファイル ジオデータベースのアイテム詳細画面から [ダウンロード] をクリックし ZIP ファイルを保存

 

⑤ ダウンロードしたZIPファイルを解凍

 

ArcGIS API for Python での操作

ArcGIS Online 上の操作は上記の手順①~⑤ですが、ArcGIS API for Python を使うと上記①~⑤の手順を以下のコードで実行でき、1 度の操作でダウンロードから解凍してファイル ジオデータベースにする処理までを行うことができます。

 

ArcGIS Online のフィーチャ サービスをファイル ジオデータベースにエクスポートし、ダウンロードと解凍までするコード

import zipfile
from arcgis.gis import GIS

# ArcGIS Online にサイン イン
username = "ユーザー名"
password = "パスワード"
gis = GIS("https://www.arcgis.com", username, password)

# ArcGIS Online のフィーチャ レイヤーを FGDB にエクスポート
item = gis.content.get("フィーチャ レイヤーのID")
exportItem = item.export('demo_fgdb','File Geodatabase')

# エクスポートした FGDB をダウンロード
dlresult = exportItem.download(save_path="保存場所のパス")

# ZIPファイルを解凍
with zipfile.ZipFile(dlresult) as existing_zip:
    existing_zip.extractall("保存場所のパス")

 

フィーチャ サービスを ファイル ジオデータベースにエクスポートしてからダウンロードすることで、現地調査の写真付きデータを ArcGIS Pro でも利用することができます。

 

※添付ファイルの容量が大きいと処理がうまくいかない場合があります。容量の大きい添付ファイル付きのフィーチャ サービスをダウンロードする方法は ESRIジャパンのサポート サイトをご覧ください。

 

2ArcGIS Pro で設定したレイアウトを PDF にエクスポートし、別の PDF と結合

ArcGIS Online からダウンロードしたデータを使って ArcGIS Pro レイアウトを作成すれば、レポートとして PDF にエクスポートすることができます。ArcGIS Pro のレイアウトでは、マップ フレームや縮尺記号、方位記号、凡例などのエレメントやアタッチメントの画像、属性情報などを追加し高品質できれいなレポートを作成することができます。

さらにレイアウトでマップ シリーズを作成すると設定した図郭やデータごとに複数ページの PDF を出力することができます。ArcGIS Pro だけでも複数ページの出力は可能ですが、それだけでは表紙や概観図といったページまでは出力されません。

そこで、ArcPy の 「appendPages」を使用することで複数の PDF を結合した新たな PDF を出力することができます。PDF の結合処理を外部のソフトを使う必要がないことが ArcPy を使うメリットのひとつです。

 

マップシリーズで PDF にエクスポート後、別の表紙用PDF と結合して、1つのPDFファイルにするコード

import arcpy
import os

# PDF の出力先を指定
pdfPath = r"C:\data\output\report.pdf"
if os.path.exists(pdfPath):
    os.remove(pdfPath)

# プロジェクトファイルをPDFに出力
output = r"C:\data\output" # 出力フォルダのパス
aprx = arcpy.mp.ArcGISProject("プロジェクトファイルのパス")
aprx.listLayouts()[0].mapSeries.exportToPDF(output + r"\map.pdf")

# PDFを結合
pdfDoc = arcpy.mp.PDFDocumentCreate(pdfPath)
pdfDoc.appendPages(r"C:\data\output\title.pdf") # 表紙となるPDF
pdfDoc.appendPages(r"C:\data\output\map.pdf") # マップシリーズで出力したPDF

#保存とオブジェクトの削除
pdfDoc.saveAndClose()
del pdfDoc

 

3.アタッチメント テーブルからアタッチメントの画像を一括出力

ArcGIS Online からダウンロードした現地調査のデータには現地の様子を撮影した写真が添付されていることも多くあります。

ArcGIS Pro にダウンロードしたファイル ジオデータベースには、フィーチャ サービスの情報を含んだテーブル (GDB_ServiceItems)、フィーチャクラス、アタッチメント テーブル (<フィーチャクラス名>_ATTACH)、フィーチャクラスとアタッチメント テーブルを関連付けるリレーションシップ クラス (<フィーチャクラス名>_ATTACHREL) が格納されています。フィーチャクラスとアタッチメントテーブルは GlobalID で関連付けられています。

 

  

レポートとは別でアタッチメントの画像だけを保存して他の業務などに使用したい場合もあるかと思います。

以下の ArcPy を使ったコードではアタッチメント テーブルからアタッチメントの添付ファイルのみを一括でエクスポートすることができます。

 

アタッチメント テーブルから添付ファイルを一括出力するコード

import arcpy
from arcpy import da
import os

# アタッチメントテーブルのパスと添付ファイルの出力先を指定
inTable = r"アタッチメントテーブルのパス"
fileLocation = r"添付ファイルの出力パス"

# アタッチメントテーブルから添付ファイルを抽出して出力
with da.SearchCursor(inTable, ['DATA', 'ATT_NAME', 'ATTACHMENTID']) as cursor:
    for item in cursor:
        attachment = item[0]
        filenum = "ATT" + str(item[2]) + "_"
        filename = filenum + str(item[1])
        open(fileLocation + os.sep + filename, 'wb').write(attachment.tobytes())
        # オブジェクトの削除
        del item
        del filenum
        del filename
        del attachment

 

アタッチメント テーブルから添付ファイルを一括出力するコードは Esri サポート (英語) ESRIジャパンのサポート サイト (ArcMap版、要ログイン) にも記載されています。Esri サポートには上記のコードを ArcGIS Pro でジオプロセシング ツール化したコードが公開されています。ESRIジャパンのサポート サイトには ArcMap でジオプロセシング ツール化したコードとツールボックスが公開されていますのであわせてご活用ください。

 

おわりに

本記事では GIS コミュニティフォーラムでのテクニカル セッション「Web GIS で集めたデータを ArcGIS Pro でも活用しよう!~レポート作成までのステップ~」で使用したコードをご紹介しました。本記事でご紹介したスクリプトは ESRIジャパンの GitHub でも公開しています。現地調査のデータから ArcGIS Pro を使ってレポート作成する際には是非ご活用いただければと思います。

 

関連リンク

Attachments

    Outcomes