Pour commencer
Lors d'une enquête sur le terrain, souhaitez-vous utiliser le suivi de position ?Suivi de position est une fonctionnalité disponible dans l'ensemble de l'organisation ArcGIS Online (ou ArcGIS Enterprise) qui permet d'enregistrer les positions actuelles et passées des utilisateurs.
Si vous n'avez jamais utilisé cette fonction ou si vous vous demandez ce qu'est le suivi de position et comment l'utiliser avec ArcGIS Field Maps, récemmentCollection de ressources ArcGIS a été ajoutée Guide de démarrage d'ArcGIS Field Maps, veuillez la consulter.
D'autre part, les méthodes de gestion des fonctions de suivi de position et d'accès aux données via ArcGIS API for Python sont expliquées dans l'aide intituléeGestion des applications ArcGIS - Configuration du suivi de position. De plus, un notebook décrivant le même contenu est publié sous le titreConfiguration du suivi de position et des vues de suivi pour votre organisation, et nous avons également publié une traduction de ce notebook, donc si vous souhaitez connaître les méthodes d'accès via l'API, veuillez les consulter.
Dans ce blog, nous expliquerons les points lors de la mise en œuvre d'un exemple de notebook créé dans ArcGIS Notebooks sur ArcGIS Online pour tester les opérations. L'exemple de notebook est publié sur GitHub sous forme formatée, donc si vous souhaitez vérifier le contenu en détail, veuillez le consulter.Exemple de notebook publié sur GitHub
- Accès aux données de suivi obtenues avec Field Maps
- Filtrer et valider les données à une date et heure spécifiques
- Tester Spatially Enabled DataFrame
- Enregistrer les données filtrées en tant que couche d'entités (Feature Layer)
La traduction mentionnée ci-dessus est également notée dans le notebook, mais la trace dans ArcGIS Online n'est conservée que pendant 30 jours. Cette fois, afin d'utiliser les données même après la période de conservation, elles sont enregistrées sur ArcGIS Online en tant que couche d'entités (Feature Layer).
Notez que le suivi de position peut être utilisé avec un abonnement payantArcGIS Developer Subscription, qui utilise un "plan pour organisation ArcGIS Online (limité au développement et aux tests)" pour effectuer le suivi avec ArcGIS Field Maps.
Carte : Exemple de notebook
Explication des points clés
Ici, nous nous concentrerons sur l'explication du code écrit dans le notebook. Si vous êtes novice dans l'utilisation d'ArcGIS Notebooks sur ArcGIS Online, nous vous recommandons vivement de lire d'abord l'article suivant.
0) Accès au module GIS
Ce qui suit est automatiquement généré lors de la création d'un nouvel ArcGIS Notebook sur ArcGIS Online et accède au module GIS, donc nous allons l'utiliser tel quel.
from arcgis.gis import GIS
gis = GIS("home")
1) Accès aux données de suivi obtenues avec Field Maps
Lorsque le suivi de position est activé dans l'organisation, un nouvel élément appelé service de suivi de position est créé, et les données de suivi obtenues avec FieldMaps sont mises à jour dans ce service.
Le service de suivi de position se compose de deux couches : la première couche Tracks stocke l'historique des positions passées des utilisateurs ; la deuxième couche Last Known Locations stocke les dernières informations de localisation des utilisateurs utilisant des applications mobiles Tracker telles que Field Maps.
Ces couches peuvent être facilement accessibles via LocationTrackingManager, mais cette fois nous utiliserons uniquement la couche Tracks (tracks_layer).
from arcgis.apps.tracker import TrackView
# Accès à LocationTrackingManager
location_tracking = gis.admin.location_tracking
# La couche Tracks peut être accédée depuis la propriété
tracks = location_tracking.tracks_layer
2) Filtrer par date et heure avec le champ location_timestamp depuis la couche Tracks
L'heure enregistrée dans Tracks est en UTC, il faut donc faire attention lors de la création des conditions WHERE pour la requête.
(Pour convertir l'heure JST en UTC, définissez l'heure UTC en soustrayant 9 heures à l'heure JST)
Cette fois, le suivi effectué avec Field Maps correspond à la période entre 15h30 et 19h00 JST le 10 janvier 2022. Par conséquent, en se référant à la clause WHERE dans MapViewer et en convertissant cette heure JST en UTC en soustrayant 9 heures, on obtient la condition suivante.
(location_timestamp BETWEEN timestamp '2022-01-10 06:30:00' AND timestamp '2022-01-10 10:00:00') AND (1=1)
Avec la condition ci-dessus, effectuez une requête avec FeatureLayer.query() puis convertissez la valeur retournée en propriété FeatureSet.FeatureLayer.query() puis utilisez la propriété retournée FeatureSet pour obtenir sdf comme suit.FeatureSetsdfavecSpatially Enabled DataFrame(SEDF).# Définir la condition WHERE en temps UTC
wh = "(location_timestamp BETWEEN timestamp '2022-01-10 06:30:00' AND timestamp '2022-01-10 10:00:00') AND (1=1)"
# La valeur retournée par FeatureLayer.query() est un FeatureSet,
# on peut obtenir SEDF depuis FeatureSet via sa propriété sdf
query_tracks = tracks.query(where = wh, out_fields='*').sdf
3) Enregistrer les données filtrées en tant que couche d'entités (Feature Layer) depuis Spatially Enabled DataFrame (SEDF)
Spatially Enabled DataFrame (SEDF), to_featurelayer()est une méthode pratique qui permet d'enregistrer directement comme couche d'entités filtrée.
# Enregistrer comme FeatureLayer du track du 10 janvier 2022
lyr = query_tracks.spatial.to_featurelayer(title='tracks_20220110', tags='tracks')
Comme ci-dessus, il suffit d'enregistrer comme couche filtrée sans écrire dix lignes supplémentaires de code.
Cependant, cela peut ne pas être très intéressant. Ici, nous présentons une autre approche utilisant Pandas DataFrame pour extraire, enregistrer puis essayer d'afficher graphiques et cartes.
2)' Autre approche ; extraction conditionnelle depuis la couche Tracks vers Pandas DataFrame
Comme indiqué dans l'aide pour la couche Tracks (tracks_layer), tracks_layer est une FeatureLayer.
Donc tout d'abord on lit les données dans un DataFrame via Spatially Enabled DataFrame (SEDF) avec la fonction 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) Autre approche ; enregistrer comme couche filtrée incluant location_timestamp_jst comme couche d'entités (Feature Layer)
'3) De même,
dans Spatially Enabled DataFrame (SEDF), 'to_featurelayer()' 'est une méthode pratique permettant d'enregistrer directement comme couche filtrée.
nous utilisons cela pour enregistrer comme couche filtrée.
'Notez que même après diverses opérations sur DataFrame,
vous pouvez vérifier si elle peut être enregistrée comme couche filtrée.
c'est pourquoi la couche filtrée enregistrée en 3) ne change pas fondamentalement.
# FeatureLayer en tant que piste du 10 janvier 2022 sauvegardée lyr = query_sdf.spatial.to_featurelayer(title='tracks_20220110', tags='tracks')
Enfin
Dans cet article,ArcGIS Developer Subscription est utilisé pour exploiter le « Plan ArcGIS Online pour organisations (limité au développement et aux tests) » disponible, et nous expliquons les points lors de l'implémentation d'un exemple d'opération de suivi dans ArcGIS Notebooks.
- Accès aux données de piste obtenues avec FieldMaps
- Filtrer et vérifier les données à une date et heure spécifiques
- Tester Spatially Enabled DataFrame
- Sauvegarder les données filtrées en tant que Feature Layer
Pour une analyse plus avancée des données de piste, consultez sur Learn ArcGIS «Analyser les données de suivi obtenues avec ArcGIS Field Maps », qui commence par la sauvegarde locale des données, puis présente une analyse approfondie et une visualisation utilisant ArcGIS Pro, veuillez vous y référer.
De plus, pour une analyse plus avancée en code, consultez sur GitHub d'Esri USA «Tracker Scripts », qui présente une analyse approfondie et une visualisation utilisant ArcGIS API for Python, veuillez vous y référer.
※ Lorsque vous devez extraire et analyser vos propres données de suivi organisationnelles, n'oubliez pas non plus la sauvegarde des données !
Liste des contenus inclus dans « Analyser les données de suivi obtenues avec ArcGIS Field Maps » (mars 2022)
・Rechercher dans les données de suivi(article en anglais)
・Créer une carte linéaire de suivi(article en anglais)
・Créer une animation à partir des données de suivi de localisation(article en anglais)
・Visualiser les données agrégées de suivi(article en anglais)
Liste des notebooks et scripts inclus dans « Tracker Scripts » (mars 2022)
Notebooks;
・Guide de démarrage rapide
・Analyse basique des pistes
・Analyse basique des pistes - PySpark
・Statut du suivi de localisation
・Création de lignes de piste
・Visualiser la déviation d'itinéraire
・Identifier les bâtiments inspectés
・Trouver les temps d'arrêt dans les polygones
・Traçage de proximité
・Créer un service cartographique agrégé
Scripts;
・Vérifier la localisation modifiée - README ici
・Miroir couche LKL - README ici
・Nettoyage des pistes polygonales - README ici
・Générer expression Arcade utilisateur(s) - README ici
・Exporter les pistes depuis AGOL - README ici