ArcGIS API for Python を利用して、レイヤーにデータを追加する

【ESRI Community Blog】

ArcGIS API for Python には多くのクラスやメソッドがあり、それらを利用することでサービスの公開やデータの変更など、様々な、アイテムやポータル自体の管理などをすることができます。

今回はその中でも、フィーチャ レイヤーにデータを追加することができる append メソッドについて紹介します。
データの更新状況や性質に応じてデータを追加する形をとることで、既存のデータを残して変化を確認する場合や、データの収集タイミングがずれる場合などに対応することができます。

ポータル上のアイテム詳細画面から手動で実行することも可能ですが、ArcGIS API for Python を利用することで、操作の自動化や定期実行など、業務の効率化にお役立てください。

また、今回は開発環境として ArcGIS Onlineで提供されている “ArcGIS Notebooks” を利用します。
ArcGIS Notebooks には ArcGIS API for Python はもちろん、os, pandas などのライブラリ  も用意されており、事前の環境構築なしで開発を行うことができます。
これにより、Notebook という形で Python スクリプトを作成、実行することができるのに加えて、GIS ポータル上でアイテムとして管理することで、ArcGIS Online 上で構築から運用まで完結して行うことが可能になります。

今回作成したNotebook については、ArcGIS Online 上で公開しておりますので、併せてご確認ください。

AkiraNAGAI_0-1658880851427.png

Notebook 作成の前準備

データソースの選定

今回紹介する append メソッドは、ファイル形式のデータを対象のフィーチャ レイヤーに追加できるため、ファイルで公開されているオープン データの 1 つとして、気象庁のアメダスの降雨量の気象データを利用します。
最新気象データのファイルには各観測所の座標データが存在しないため、別途座標データを取得したうえで、その座標データとアメダスの最新データの結合を行っていきます。
また、データを追加するためのフィーチャ レイヤーは、追加するデータの形式に合わせてあらかじめ作成しました。

このレイヤーも ArcGIS Online で公開しておりますので、よろしければ各種属性など、ご参照ください。

Notebook の作成権限

ご利用のユーザーロールの権限を確認して、Notebook が利用できることを確認します。
利用できる場合は組織画面上部のバナーに「ノートブック」というタブが表示されているはずです。
詳細は「はじめてのArcGIS API for Python : Notebook の紹介」をご確認ください。

AkiraNAGAI_1-1658880901443.png

作成した Notebook の概要

大まかな流れは以下のようになります。
詳しくは公開済みの Notebook をご確認ください。

  1. データを取得する(CSV ファイル)
  2. 追加するフィーチャ レイヤーの形式に合わせて位置情報を追加し、追加用 CSV ファイルを作成する
  3. 作成した CSV ファイルをポータルにアイテムとしてアップロードする
  4. CSV ファイルの内容をフィーチャ レイヤーに追加する

その中でも、作成した Notebook の肝となる以下の 2つのポイントについて解説いたします。

  1. ファイルの格納場所について
  2. append メソッドについて

1. ファイルの格納場所について

ArcGIS Online にデータを追加するには、アイテムとしてアップロードするか、各種オンライン ストレージを利用する必要がありますが、ArcGIS Notebooks には標準の格納場所として “/arcgis/home” というディレクトリが用意されているため、今回はここを利用することにします。

このディレクトリはアカウント単位で存在しているため、Notebook を実行する
対象のディレクトリについては、ArcGIS Notebooks の編集画面上部のファイルタブから中身を確認することができ、ウィンドウ下部の[ファイルの選択]からファイルをアップロードすることが可能です。

今回の Notebook では、準備した座標用のファイルをあらかじめ、このディレクトリに配置しています。

また、フィーチャ を追加するための CSV ファイルも同様に、このディレクトリにダウンロードします。

AkiraNAGAI_2-1658880993059.png

# 準備していた座標結合用のデータを取得する
amedas_location = pd.read_csv(/arcgis/home/アメダス座標一覧.csv’)

# 気象庁からアメダスの 1 時間ごとのデータをダウンロード
# ファイル名に上記で取得した日時を利用する
url = “https://www.data.jma.go.jp/obd/stats/data/mdrr/pre_rct/alltable/pre1h00_rct.csv”
dataFile =/arcgis/home/+ now +.csv”
urllib.request.urlretrieve(url, dataFile)

2. append メソッドについて

を利用するためには、追加するフィーチャ レイヤーの FeatureLayer クラスのインスタンスを取得する必要があります。このクラスについては過去の記事「さわって覚える ArcGIS API for Python : フィーチャ データ編」でも解説しておりますので、よろしければ併せてご確認ください。

大まかな処理としては、まず Feature Layer アイテムを取得して、その中から対象のレイヤーを選択します。

今回利用したアイテムには一つしかレイヤーがありませんでしたが、アイテム内にレイヤーが複数ある場合は配列のインデックスの値を調整する必要があります。

# CSV ファイルを GIS ポータルのアイテムとしてアップロード
title = “appendData”+ now
tags = “アメダス”
itemtype = “CSV”
item_props = {type: itemtype,” tags”:tags,”title”:title}

append_CSV = gis.content.add (item_properties = item_props, data = amedasCSV)
append_CSV

~~中略~~

# コンテンツ ID を利用してレイヤーを検索
layer = gis.content.search(query=id: アイテム ID を入力”)[0]
layer

# データを追加する FeatureLayer クラスのインスタンスを取得
fl = layer.layers[0]

# append メソッドを実行する
fl.append(
item_id = append_CSV.id,
upload_format=”csv”,
upsert=False,
source_info =gis.content.analyze(item = append_CSV.id)[‘publishParameters’]

今回のNotebook 内の append メソッドでは、必須項目を含む以下の 4 つの変数を設定しました。

  • Item_id : アイテム ID(アップロードした追加用レイヤー の ID)
  • upload_format : 追加するデータの形式(csv)
  • upsert : 既存フィーチャの更新を行うかのフラグ(今回は行わないため False)
  • source_info : 追加する CSV ファイルの公開形式

引数source_info は、追加する CSV ファイルの内容を解析して得られるpublishParameters という値を利用します。
この解析には別途 analyze というメソッドを利用し、その実行結果を引数に利用しています。

結果

今回はアメダスの最新データを 1 時間おきに取得して、レイヤーに追加しました。その際、シンボルの色で取得日時を、大きさで降水量を表しています。

各処理を実行結果から、データが追加されていることが確認できます。

1回目の実行結果

AkiraNAGAI_3-1658881166011.png

2回目の実行結果

AkiraNAGAI_4-1658881181630.png

3回目の実行結果

AkiraNAGAI_5-1658881194604.png

備考

今回のサンプルでは、利用したファイルおよびアイテムは削除されずに保存されています。ご不要の場合は、レイヤーに追加した後に削除してしまっても問題ありません。

ファイルのダウンロード先である “/arcgis/home “ディレクトリはコンテンツ画面などには表示されないため、ダウンロードした CSV ファイルは、追加処理の実行後に python の標準ライブラリの os.remove() メソッドなどを利用して削除する必要があります。

os.remove(amedasCSV)

また、Notebooks の編集画面 のファイル タブから削除することも可能です。

AkiraNAGAI_6-1658881243665.png

終わりに

今回は、フィーチャ レイヤーに対して既存のデータを保持したまま、新しいデータを追加する方法の 1つとして、ArcGIS API for Python の append メソッドを紹介しました。

今後の業務の中で ArcGIS API for Python や ArcGIS Notebooks を作業の効率化、簡略化に役立てていただけましたら幸いです。

関連リンク