Začínáme
Při terénním průzkumu chcete použít sledování polohy?Sledování polohy je funkce dostupná v celé organizaci ArcGIS Online (nebo ArcGIS Enterprise), která uživatelům umožňuje zaznamenávat aktuální i historické polohy.
Pokud jste ji ještě nepoužili, nebo nevíte, co je sledování polohy a jak jej používat v ArcGIS Field Maps, nedávnosbírka zdrojů ArcGIS bylapřidána do průvodce startem ArcGIS Field Maps, prosím, podívejte se na ni.
Na druhou stranu, jak spravovat funkce sledování polohy a přistupovat k datům pomocí ArcGIS API for Python je vysvětleno v nápovědě pod názvemManaging ArcGIS applications - Configuring Location Tracking a také je k dispozici poznámkový blok s podobným obsahem nazvanýConfiguring Location Tracking and Track Views For Your Organization, který byl zveřejněn, a my jsme také zveřejnili jeho překlad, takže pokud chcete vědět, jak přistupovat k API, podívejte se na ně.
V tomto blogu vysvětlíme body implementace ukázkového poznámkového bloku vytvořeného v ArcGIS Notebooks na ArcGIS Online pro vyzkoušení operací. Ukázkový poznámkový blok jeve zjednodušené podobě zveřejněn na GitHubu, takže pokud chcete podrobněji zkontrolovat obsah, podívejte se tam.
- Přístup k trackovacím datům získaným pomocí Field Maps
- Vyhledání a ověření dat pro konkrétní časové období
- Vyzkoušení Spatially Enabled DataFrame
- Uložit vyhledaná data jako Feature Layer (vrstvu prvků)
Poznámka: I když je tento překlad uveden v poznámkovém bloku, tracky v ArcGIS Online jsou uchovávány pouze po dobu 30 dnů. Tentokrát však pro použití dat i po uplynutí doby uložení ukládáme data jako Feature Layer na ArcGIS Online.
Poznámka: Sledování polohy lze využít s placenýmArcGIS Developer Subscription, který umožňuje využití plánu "ArcGIS Online organizace (omezené pro vývoj a testování)" a provádět sledování v ArcGIS Field Maps.
Obrázek: Ukázkový poznámkový blok
Vysvětlení bodů
Zde se zaměříme na vysvětlení kódu napsaného v poznámkovém bloku. Pokud máte obavy z používání ArcGIS Notebooks na ArcGIS Online, doporučujeme nejprve si přečíst následující článek.
0) Přístup k GIS modelu
Níže uvedené je automaticky generováno při vytváření nového ArcGIS Notebooku na ArcGIS Online a slouží k přístupu k GIS modelu, takže jej použijeme takto.
from arcgis.gis import GIS
gis = GIS("home")
1) Přístup k trackovacím datům získaným pomocí Field Maps
Když je ve vaší organizaci povoleno sledování polohy, vytvoří se nová položka nazvaná Location Tracking Service a trackovací data získaná pomocí FieldMaps jsou do této služby nahrávána.
Služba sledování polohy se skládá ze dvou vrstev: první vrstva Tracks uchovává historii polohových informací jednotlivých uživatelů; druhá vrstva Last Known Locations ukládá nejnovější polohové informace jednotlivých uživatelů využívajících mobilní aplikaci Tracker jako Field Maps.
K těmto vrstvám lze snadno přistupovat přes LocationTrackingManager, ale tentokrát použijeme pouze vrstvu Tracks (tracks_layer).
from arcgis.apps.tracker import TrackView
# Přístup k LocationTrackingManager
location_tracking = gis.admin.location_tracking
# Vrstva Tracks je přístupná přes property
tracks = location_tracking.tracks_layer
2) Vyhledání podle data a času ve filtru location_timestamp z vrstvy Tracks
Čas zaznamenaný ve vrstvách Tracks je v UTC, proto je třeba být opatrný při vytváření dotazovacích podmínek.
(Při převodu z JST na UTC nastavte čas odečtením 9 hodin od JST)
Tentokrát bylo sledování polohy provedeno v čase od 15:30 do 19:00 dne 10. ledna 2022 podle JST. Proto nastavíme podmínku where v MapVieweru tak, že převedeme čas z JST odečtením 9 hodin na UTC takto:
(location_timestamp BETWEEN timestamp '2022-01-10 06:30:00' AND timestamp '2022-01-10 10:00:00') AND (1=1)
Podle výše uvedené podmínky provedeme dotaz pomocí FeatureLayer.query(), poté uložíme návratovou hodnotu FeatureSet, a nakonec ji převedeme na sdf, tedy Spatially Enabled DataFrame.
# Nastavení filtru v UTC čase
wh = "(location_timestamp BETWEEN timestamp '2022-01-10 06:30:00' AND timestamp '2022-01-10 10:00:00') AND (1=1)"
# Návratová hodnota FeatureLayer.query() je FeatureSet, FeatureSet má property sdf pro získání SEDF
query_tracks = tracks.query(where = wh, out_fields='*').sdf
3) Uložení vyhledaných dat jako Feature Layer (vrstvu prvků) pomocí Spatially Enabled DataFrame (SEDF)
to_featurelayer() je pohodlná metoda, kterou využijeme k uložení jako Feature Layer.
# Uložení tracků z 10. ledna 2022 jako FeatureLayer
lyr = query_tracks.spatial.to_featurelayer(title='tracks_20220110', tags='tracks')
Jak vidíte výše, stačí uložit jako Feature Layer bez psaní dalších řádků kódu.
To by však nebylo příliš zajímavé, proto zde představíme jiný přístup s použitím Pandas DataFrame pro filtrování, ukládání a nakonec i zobrazení grafů a map s ukázkovým kódem.
2) Jiný přístup; filtrování vrstvy Tracks pomocí Pandas DataFrame podle podmínek
Jak je uvedeno v nápovědě u vrstvy Tracks (tracks_layer), tracks_layer je FeatureLayer. Proto nejprve načteme data do Pandas Spatially Enabled DataFrame (SEDF) pomocí funkce from_layer().
# Načtení vrstvy Tracks do Spatially Enabled DataFrame (SEDF)
import pandas as pd
sdf = pd.DataFrame.spatial.from_layer(tracks)
Dále nastavíme datum a čas ve filtru location_timestamp a načteme pouze trackovací data odpovídající aktuálnímu použití Field Maps do samostatného DataFrame.
# Načtení do DataFrame podle podmínek BETWEEN ve Feature Layer výše
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) Operace dobře fungující s Pandas DataFrame; zobrazení grafů a map','
「さわって覚える 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 jako uložení tras z 10. ledna 2022 lyr = query_sdf.spatial.to_featurelayer(title='tracks_20220110', tags='tracks')
Nakonec
V tomto článkuArcGIS Developer Subscription využíváme dostupný „ArcGIS Online organizační plán (omezený pro vývoj a testování)“ a v ArcGIS Notebooks jsme vyzkoušeli následující operace s ukázkou implementace bodů při práci s trasami.
- Přístup k datům tras získaným ve FieldMaps
- Ověření dat pro konkrétní datum a čas
- Vyzkoušení Spatially Enabled DataFrame
- Uložení ověřených dat jako Feature Layer
Pokročilejší analýza dat tras je představena v Learn ArcGIS v článku „Analýza sledovacích dat získaných v ArcGIS Field Maps“a pro ukládání dat lokálně je uvedeno podrobné vysvětlení pokročilé analýzy a vizualizace pomocí ArcGIS Pro, proto se na to prosím podívejte.
Dále je popsána pokročilá analýza v kódu v americkém Esri GitHub repozitáři „Tracker Scripts“, kde jsou představeny pokročilé analýzy a vizualizace využívající ArcGIS API for Python, proto se na to prosím podívejte.
※ Pokud potřebujete analyzovat data tras vaší vlastní organizace, nezapomeňte také na zálohu dat!
Seznam obsahu uvedený v článku „Analýza sledovacích dat získaných v ArcGIS Field Maps“ (k březnu 2022)
・Ověření vyhledávání ve sledovacích datech(článek v angličtině)
・Vytvoření liniových map ze sledovacích dat(článek v angličtině)
・Vytvoření animace pomocí sledovacích dat polohy(článek v angličtině)
・Vizualizace agregovaných sledovacích dat(článek v angličtině)
Seznam notebooků a skriptů uvedených v „Tracker Scripts“ (k březnu 2022)
Notebook;
・Rychlý průvodce začátkem práce (Quickstart Guide)
・Základní analýza tras (Basic Track Analysis)
・Základní analýza tras - PySpark (Basic Track Analysis - PySpark)
・Stav sledování polohy (Location Tracking Status)
・Vytváření linií tras (Creating Track Lines)
・Vizualizace odchylek trasy (Visualize Route Deviance)
・Identifikace kontrolovaných budov (Identify Inspected Buildings)
・Nalezení dob setrvání v polygonech (Find Dwell Times at Polygons)
・Sledování blízkosti (Proximity Tracing)
・Vytvoření agregované mapové služby (Create an Aggregated Map Service)
Skript;
・Kontrola umístění úprav (Check Edit Location) - README zde
・Zrcadlení vrstvy LKL (Mirror LKL Layer) - README zde
・Čištění polygonálních tras (Polygon Cleanup Tracks) - README zde
・Generování Arcade výrazu uživatelů (Generate Users Arcade Expression) - README zde
・Export tras z AGOL (Export Tracks From AGOL) - README zde
Reference / Odkazy / Zdroje informací: