ArcGIS Field Maps で取得したトラッキングデータの保存とSpatially Enabled DataFrameを試す

1447
0
03-10-2022 12:12 AM
Labels (2)

ArcGIS Field Maps で取得したトラッキングデータの保存とSpatially Enabled DataFrameを試す

はじめに

現地調査の際に、位置のトラッキングをお使いでしょうか? 位置のトラッキング は、ArcGIS Online(もしくはArcGIS Enterprise)の組織全体で利用できる機能で、ユーザーの現在地と過去の位置を記録する機能を提供します。

まだ利用したことがない方や、位置のトラッキングって何?、ArcGIS Field Maps でどのように使うの?という方は、最近、ArcGIS リソース集ArcGIS Field Maps のスタートアップ ガイド が追加されましたので、そちらをご参照ください。

一方、ArcGIS API for Python を使用した位置のトラッキング機能の管理方法やデータへのアクセス方法は、Help に”Managing ArcGIS applications - Configuring Location Tracking” として説明されています。また、同じ内容を記載したノートブックが”Configuring Location Tracking and Track Views For Your Organization” として公開されており、それを翻訳したノートブックも公開 していますので、API でのアクセス方法が知りたい方は、そちらをご参照ください。

本ブログでは、ArcGIS Online 上のArcGIS Notebooks で作成した、次の操作を試すサンプル ノートブックの実装時のポイントを解説していきます。サンプル ノートブックは、整形したものをGitHub で公開 しておりますので、より詳細に内容を確認したい場合は、そちらを参照ください。

  • Field Maps で取得したトラック データへアクセス
  • 特定の日時のデータをクエリして確認
  • Spatially Enabled DataFrame を試す
  • クエリしたデータをフィーチャ レイヤー(Feature Layer)として保存 ※

※ 上記の翻訳したノートブックでも記載していますが、ArcGIS Online のトラックは30日間のみ保存される仕様です。今回は、保存期間が経過した後でもデータとして利用するために、フィーチャ レイヤー(Feature Layer)としてArcGIS Online 上に保存しています。

なお、位置のトラッキングは、有償のArcGIS Developer Subscription で利用可能な「ArcGIS Online 組織向けプラン(開発およびテスト用途限定)」を利用し、ArcGIS Field Maps でトラッキングを行いました。

save_track_to_featurelayer_sample.png

図:サンプル ノートブック

 

ポイント解説

ここからは、ノートブックに書かれているコードの解説が中心になります。ArcGIS Online 上のArcGIS Notebooks の使い方に不安がある方は、最初に、以下の記事を一読いただくことをお勧めします。

0) GIS モジュールへのアクセス

以下は、ArcGIS Online 上のArcGIS Notebook を新規作成時に自動的に生成され、GIS モジュールにアクセスするものですので、そのまま利用します。

from arcgis.gis import GIS
gis = GIS("home")

 

1) Field Maps で取得したトラックデータへアクセス

組織で位置のトラッキング が有効化されると 位置トラッキング サービスという新しいアイテムが作成され、FieldMaps で取得したトラック データは、このサービスにアップロードされます。

位置トラッキング サービス は2つのレイヤーで構成され、最初のレイヤーであるTracks は、各ユーザーの過去の位置情報の履歴を保存し、2つ目のレイヤーであるLast Known Locations は、Field Maps 等のTracker モバイル アプリ を利用している各ユーザーの最新の位置情報を格納します。

これらのレイヤーにはLocationTrackingManager を通して簡単にアクセスできますが、今回利用するのは、Tracks レイヤー(tracks_layer)です。

from arcgis.apps.tracker import TrackView
# LocationTrackingManager にアクセス
location_tracking = gis.admin.location_tracking

# Tracks レイヤー はプロパティからアクセス可能
tracks = location_tracking.tracks_layer

 

2) Tracks レイヤー から location_timestamp フィールドで日付と時間を指定してクエリ

Tracks に記録されている時間はUTCなので、クエリの条件文を作成する際には注意が必要です。

(JST時間からUTC時間に変換する際には、JST時間から -9時間した時間をUTC時間に設定します)

今回、Field Maps で位置のトラッキングを行ったのは、JST時間で2022年01月10日の15時30分~19時の間です。そのため、MapViewer でのwhere句 を参考にJST時間から-9時間したUTC時間に変換した条件設定をすると、次のようになります。

(location_timestamp BETWEEN timestamp '2022-01-10 06:30:00' AND timestamp '2022-01-10 10:00:00') AND (1=1)

 

上記の条件で、FeatureLayer.query() でクエリを行い、さらに戻り値のFeatureSet のプロパティsdfで、Spatially Enabled DataFrame(SEDF)にしてします。

# 抽出条件をUTC時間で設定
wh = "(location_timestamp BETWEEN timestamp '2022-01-10 06:30:00' AND timestamp '2022-01-10 10:00:00') AND (1=1)"
# FeatureLayer.query() の戻り値はFeatureSet、FeatureSetプロパティsdfでSEDFを取得可能
query_tracks = tracks.query(where = wh, out_fields='*').sdf

 

3) クエリしたデータをフィーチャ レイヤー(Feature Layer)として保存

Spatially Enabled DataFrame(SEDF)に、to_featurelayer() という便利なメソッドがあるので、それを利用して、フィーチャ レイヤーとして保存します。

# FeatureLayer として2022年1月10日のトラックを保存
lyr = query_tracks.spatial.to_featurelayer(title='tracks_20220110', tags='tracks')

以上のように、フィーチャ レイヤーとして保存するだけであれば、10行もコードを書かずに済みます。

それだけではあまり面白くないため、ここからは別のアプローチとして、PandasのDataFrame を使った場合の、抽出、保存、ついでにグラフ表示やマップに表示を試してみたコードも紹介します。

 

2)’ 別のアプローチ ; Tracks レイヤーをPandas のDateFrame で条件抽出

Help のTracks レイヤー(tracks_layer)に記載されているように、tracks_layer はFeatureLayer です。そのため、まずはSpatially Enabled DataFrame (SEDF) のfrom_layer() 関数でDataFrame にデータを読み込みます。

# Spatially Enabled DataFrame (SEDF) にTracks レイヤー を読み込みます
import pandas as pd
sdf = pd.DataFrame.spatial.from_layer(tracks)

 

次に、 location_timestamp フィールドで日付と時間を指定して、今回のField Maps で対象としているトラッキングデータのみを、別のDataFrame に読み込みます。

# 上記のFeature Layer の BETWEEN 相当の条件でDataFrame に読み込みします
import datetime as dt
#2022-01-10
query_sdf = sdf[(sdf['location_timestamp'] >= dt.datetime(2022,1,10,6,30,0)) & (sdf['location_timestamp'] < dt.datetime(2022,1,10,10,0,0))]

 

2)'' Pandas のDataFrame でよく行う操作、グラフ表示や地図表示

さわって覚える ArcGIS API for Python : Spatially Enabled DataFrame 編」で紹介したように、Spatially Enabled DataFrame (SEDF) は、一般的な Pandas の DataFrame に spatial というカスタムネームスペースを挿入して、空間的な機能を持たせているものです。そのため、Pandas のDataFrame でよく行う操作も行うことが可能です。GitHub で公開しているノートブック(リンク予定)では、次の操作を試したコードと結果を公開していますが、冗長になるため、ここではコードのみ記載します。

  • 要約統計量の算出
#要約統計量の算出
query_sdf.describe()
  • 特定の列を指定した統計値
#特定の列を指定した統計値の算出
query_sdf['speed'].mean()
  • query 関数での抽出し、要約統計量を算出
#query 関数を使って平均速度以上のレコードの抽出
over_sdf = query_sdf.query('speed >= 1.503300')
over_sdf.describe()

 

その他にも、matplotlib でのグラフ表示(UTC時間)、マップにTracks レイヤーを表示も行っております。同様に、冗長になるため、ここでは実現するまでのコードのみ記載します。

  • matplotlib でのグラフ表示(UTC時間)
# UTC から JST に変換してx:時間、y:スピード でグラフに表示してみます
# 警告の回避のため明示的にDataFrameをcopy()
query_sdf = query_sdf.copy()
query_sdf['location_timestamp_jst'] = pd.to_datetime(query_sdf['location_timestamp'], utc=True).dt.tz_convert('Asia/Tokyo')
# JST 時間に変換済みのx軸でグラフ表示
query_sdf.plot(x='location_timestamp_jst', y='speed')
  • マップにTracks レイヤーを表示
my_map = gis.map('埼玉県川越市')
my_map #セルに地図を表示

# Tracks レイヤーを追加
my_map.add_layer(tracks)

 

3)' 別のアプローチ ; 計算したlocation_timestamp_jst を含むフィーチャ レイヤー(Feature Layer)として保存

3) と同様、Spatially Enabled DataFrame(SEDF)に、to_featurelayer() という便利なメソッドがあるので、それを利用して、フィーチャ レイヤーとして保存します。

※これはDataFrame でいろいろ操作した結果でも、フィーチャ レイヤーとして保存可能かを確認している操作になります。そのため、3) で保存したフィーチャ レイヤーと本質的に変わりありません。

# FeatureLayer として2022年1月10日のトラックを保存
lyr = query_sdf.spatial.to_featurelayer(title='tracks_20220110', tags='tracks')

 

最後に

今回の記事では、ArcGIS Developer Subscription で利用可能な「ArcGIS Online 組織向けプラン(開発およびテスト用途限定)」を利用し、ArcGIS Notebooks で次の操作を試すサンプル ノートブックの実装時のポイントを解説しました。

  • FieldMaps で取得したトラック データへアクセス
  • 特定の日時のデータをクエリして確認
  • Spatially Enabled DataFrame を試す
  • クエリしたデータをフィーチャ レイヤー(Feature Layer)として保存

 

トラック データのより高度な分析は、Learn ArcGIS で「ArcGIS Field Maps で取得した追跡データを分析する」として、データのローカルへの保存にはじまり、ArcGIS Pro を使用したさまざまな分析や視覚化について、紹介されていますので合わせてご参照ください。

また、コードでのより高度な分析は、米国Esri のGitHub に「Tracker Scripts」として、ArcGIS API for Python を使用したさまざまな分析や可視化について、紹介されていますので合わせてご参照ください。

※ ご自身の組織のトラック データを振り返って分析をする必要がある際には、データのバックアップも忘れずに!

 

「ArcGIS Field Maps で取得した追跡データを分析する」に掲載されているコンテンツ一覧(2022年3月時点)

追跡データで検査を検証する(英語の記事)

追跡データで線形ヒートマップを作成する(英語の記事)

位置の追跡データを使用してアニメーションを作成する(英語の記事)

集約した追跡データを視覚化する(英語の記事)

 

「Tracker Scripts」に掲載されているノートブックとスクリプトの一覧(2022年3月時点)

ノートブック;

Quickstart Guide

Basic Track Analysis

Basic Track Analysis - PySpark

Location Tracking Status

Creating Track Lines

Visualize Route Deviance

Identify Inspected Buildings

Find Dwell Times at Polygons

Proximity Tracing

Create an Aggregated Map Service

 

スクリプト;

Check Edit Location - README here

Mirror LKL Layer - README here

Polygon Cleanup Tracks - README here

Generate Users Arcade Expression - README here

Export Tracks From AGOL - README here

 

参考

【ブログでの参考記事】

【本記事に関連した参考情報】

 

Labels (2)
Version history
Last update:
‎03-10-2022 12:12 AM
Updated by: