Zunächst
Möchten Sie bei der Felduntersuchung Tracking-Daten zur Position verwenden?Positions-Tracking ist eine Funktion, die in der gesamten Organisation von ArcGIS Online (oder ArcGIS Enterprise) verfügbar ist und es Benutzern ermöglicht, aktuelle und vergangene Positionen zu erfassen.
Für diejenigen, die es noch nicht verwendet haben oder sich fragen, was Positions-Tracking ist und wie man es mit ArcGIS Field Maps verwendet, wurde kürzlichArcGIS Ressourcen-Sammlung hinzugefügt.ArcGIS Field Maps Start-App-Anleitung wurde hinzugefügt, bitte sehen Sie sich diese an.
Außerdem wird in der Hilfe unter dem TitelVerwalten von ArcGIS-Anwendungen - Konfigurieren des Positions-Trackings erklärt, wie man die Tracking-Funktion mit ArcGIS API for Python verwaltet und auf Daten zugreift. Außerdem gibt es ein Notizbuch mit dem gleichen Inhalt namensKonfigurieren des Positions-Trackings und der Track-Ansichten für Ihre Organisation, das veröffentlicht wurde, und wir haben auch eine übersetzte Version dieses Notizbuchs veröffentlicht, daher schauen Sie sich diese bitte an, wenn Sie wissen möchten, wie man per API darauf zugreift.
In diesem Blog erklären wir die Implementierungspunkte eines Beispielnotebooks, das in ArcGIS Notebooks auf ArcGIS Online erstellt wurde. Das Beispielnotebook istauf GitHub veröffentlicht worden. Wenn Sie den Inhalt genauer überprüfen möchten, sehen Sie sich bitte dort an.
- Zugriff auf mit Field Maps erfasste Tracking-Daten
- Abfrage und Überprüfung von Daten zu einem bestimmten Datum und einer bestimmten Uhrzeit
- Testen des Spatially Enabled DataFrame
- Gespeicherte abgefragte Daten als Feature Layer speichern
Das oben erwähnte übersetzte Notizbuch beschreibt dies ebenfalls, aber die Tracks in ArcGIS Online werden nur 30 Tage lang gespeichert. Um die Daten auch nach Ablauf der Speicherfrist weiterhin als Daten nutzen zu können, werden sie als Feature Layer in ArcGIS Online gespeichert.
Beachten Sie, dass das Positions-Tracking mit einem kostenpflichtigenArcGIS Developer Subscription nutzbaren "ArcGIS Online Organisationsplan (Entwicklung sowie Testzwecke eingeschränkt)" verwendet wurde, um das Tracking mit ArcGIS Field Maps durchzuführen.
Abbildung: Beispielnotebook
Erklärung der Punkte
Hier konzentrieren wir uns auf die Erklärung des Codes im Notebook. Wenn Sie unsicher sind, wie man ArcGIS Notebooks auf ArcGIS Online verwendet, empfehlen wir Ihnen zunächst, den folgenden Artikel zu lesen.
0) Zugriff auf das GIS-Modul
Das Folgende wird automatisch beim Erstellen eines neuen ArcGIS Notebooks auf ArcGIS Online generiert und ermöglicht den Zugriff auf das GIS-Modul. Verwenden Sie es einfach so.
from arcgis.gis import GIS
gis = GIS("home")
1) Zugriff auf mit Field Maps erfasste Tracking-Daten
Wenn das Positions-Tracking in der Organisation aktiviert ist, wird ein neues Element namens Positions-Tracking-Service erstellt. Die mit Field Maps erfassten Tracking-Daten werden in diesem Service aktualisiert.
Der Positions-Tracking-Service besteht aus zwei Layern: Der erste Layer namens Tracks speichert den Verlauf der vergangenen Positionsinformationen jedes Benutzers. Der zweite Layer namens Last Known Locations speichert die neuesten Positionsinformationen jedes Benutzers, der Tracker Mobile Apps wie Field Maps verwendet.
Auf diese Layer kann einfach über LocationTrackingManager zugegriffen werden. Für diesen Beitrag verwenden wir jedoch nur den Tracks-Layer (tracks_layer).
from arcgis.apps.tracker import TrackView
# Zugriff auf LocationTrackingManager
location_tracking = gis.admin.location_tracking
# Zugriff auf Tracks-Layer vom Property
tracks = location_tracking.tracks_layer
2) Abfrage nach Datum und Uhrzeit mit dem Feld location_timestamp zum Filtern
Die Zeitangaben in Tracks sind in UTC. Daher ist Vorsicht geboten bei der Erstellung von Abfragebedingungen.
(Um von JST-Zeit zu UTC-Zeit zu konvertieren, stellen Sie die Zeit ein, indem Sie 9 Stunden von JST-Zeit subtrahieren.)
Diesmal wurden die Positions-Tracking-Daten in Field Maps zwischen 15:30 und 19:00 Uhr am 10. Januar 2022 JST erfasst. Daher erstellen wir im MapViewer eine where-Bedingung unter Berücksichtigung der Umrechnung von JST-Zeit minus 9 Stunden zu UTC-Zeit wie folgt:
(location_timestamp BETWEEN timestamp '2022-01-10 06:30:00' AND timestamp '2022-01-10 10:00:00') AND (1=1)
Mit obiger Bedingung wird eine Abfrage mit FeatureLayer.query() durchgeführt und anschließend wird das Ergebnis als Property des zurückgegebenen FeatureSet gespeichert.FeatureLayer.query() durchgeführt und anschließend wird das Ergebnis als Property des zurückgegebenen FeatureSet sdf gespeichert und als Spatially Enabled DataFrame (SEDF) umgewandelt.# Setzen der Abfragebedingung in UTC-Zeit
wh = "(location_timestamp BETWEEN timestamp '2022-01-10 06:30:00' AND timestamp '2022-01-10 10:00:00') AND (1=1)"
# Das Ergebnis von FeatureLayer.query() ist ein FeatureSet,
# aus dem mit Property sdf ein SEDF abgerufen werden kann
query_tracks = tracks.query(where = wh, out_fields='*').sdf
3) Speichern der abgefragten Daten als Feature Layer (Feature Layer)
Spatially Enabled DataFrame (SEDF) hat eine praktische Methode namens to_featurelayer() , mit der Sie die Daten als Feature Layer speichern können.
# Speichern des Tracks vom 10. Januar 2022 als FeatureLayer
lyr = query_tracks.spatial.to_featurelayer(title='tracks_20220110', tags='tracks')
Wie oben gezeigt reicht es aus, sie nur als Feature Layer zu speichern; es müssen keine weiteren 10 Zeilen Code geschrieben werden.
Das allein wäre nicht sehr interessant. Daher stellen wir hier einen anderen Ansatz vor und zeigen Codebeispiele für das Abrufen, Speichern sowie die grafische Darstellung und Kartendarstellung unter Verwendung eines Pandas DataFrame.
2) Anderer Ansatz; Abfrage des Tracks-Layers mit Pandas DataFrame nach Bedingungen
Wie im Hilfebereich zum Tracks-Layer (tracks_layer)に記載されているように、tracks_layer はFeatureLayer です。そのため、まずはSpatially Enabled DataFrame (SEDF) のfrom_layer() 関数でDataFrame にデータを読み込みます。
# Spatially Enabled DataFrame (SEDF) にTracks レイヤー を読み込みますimport pandas as pdsdf = pd.DataFrame.spatial.from_layer(tracks)
次に、 location_timestamp フィールドで日付と時間を指定して、今回のField Maps で対象としているトラッキングデータのみを、別のDataFrame に読み込みます。
# 上記のFeature Layer の BETWEEN 相当の条件でDataFrame に読み込みしますimport datetime as dt#2022-01-10query_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 関数を使って平均速度以上のレコードの抽出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')
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 als Track vom 10. Januar 2022 speichern lyr = query_sdf.spatial.to_featurelayer(title='tracks_20220110', tags='tracks')
Abschließend
In diesem ArtikelArcGIS Developer Subscription wird der nutzbare "ArcGIS Online Organisationsplan (Entwicklung und Test mit Nutzungsbeschränkung)" verwendet, um in ArcGIS Notebooks die Implementierung eines Beispiel-Track-Notebooks zu demonstrieren.
- Zugriff auf Track-Daten, die mit FieldMaps erfasst wurden
- Daten für ein bestimmtes Datum und eine bestimmte Uhrzeit abfragen und überprüfen
- Spatially Enabled DataFrame ausprobieren
- Gefilterte Daten als Feature Layer speichern
Für eine vertiefte Analyse der Track-Daten siehe das Learn ArcGIS Modul "Analyse von Nachverfolgungsdaten aus ArcGIS Field Maps". Dort wird auch erläutert, wie man die Daten lokal speichert und mit ArcGIS Pro weiterführende Analysen und Visualisierungen durchführt. Bitte beachten Sie diese Informationen.
Für eine noch detailliertere Analyse per Code finden Sie auf dem US-amerikanischen Esri GitHub-Repository unter "Tracker Scripts" weiterführende Beispiele zur Analyse und Visualisierung mit der ArcGIS API for Python. Bitte sehen Sie sich diese an.
Wenn Sie die Track-Daten Ihrer eigenen Organisation exportieren und analysieren möchten, vergessen Sie nicht, auch ein Backup der Daten anzulegen!
Eine Übersicht der im Artikel "Analyse von Nachverfolgungsdaten aus ArcGIS Field Maps" (Stand März 2022) enthaltenen Inhalte:
3Nachverfolgungsdaten abfragen und überprüfen(Artikel auf Englisch)
3Linien-Heatmap aus Nachverfolgungsdaten erstellen(Artikel auf Englisch)
3Animation mit Positions-Nachverfolgungsdaten erstellen(Artikel auf Englisch)
3Aggregierte Nachverfolgungsdaten visualisieren(Artikel auf Englisch)
Eine Liste der im "Tracker Scripts" enthaltenen Notebooks und Skripte (Stand März 2022):
Notebooks;
3Quickstart Guide
3Basic Track Analysis
3Basic Track Analysis - PySpark
3Status der Standortverfolgung
3Track-Linien erstellen
3Abweichungen der Route visualisieren
3Inspektierte Gebäude identifizieren
3Verweilzeiten in Polygonen finden
3Proximity Tracing
3Aggregierten Map Service erstellen
Skript;
3Bearbeitungsstandort prüfen - README hier
3LKL Layer spiegeln - README hier
3Polygon Cleanup Tracks - README hier
3Benutzer Arcade Expression generieren - README hier
3Tracks aus AGOL exportieren - README here
参考
【ブログでの参考記事】
【本記事に関連した参考情報】