Para empezar
¿Quieres usar el rastreo de ubicación durante una inspección en campo?Rastreo de ubicación es una función que puede ser utilizada en toda la organización de ArcGIS Online (o ArcGIS Enterprise) y proporciona la capacidad de registrar las ubicaciones actuales y pasadas de los usuarios.
Si nunca lo has usado, o te preguntas qué es el rastreo de ubicación y cómo usarlo con ArcGIS Field Maps, recientementecolección de recursos de ArcGIS ha añadidouna guía para comenzar con ArcGIS Field Maps, por favor revísala.
Por otro lado, la gestión y acceso a la función de rastreo de ubicación usando ArcGIS API for Python está explicada en la Ayuda bajo el títuloManaging ArcGIS applications - Configuring Location Tracking. Además, un notebook con el mismo contenido está publicado comoConfiguring Location Tracking and Track Views For Your Organization, y también hemos publicado una traducción del notebook, así que si quieres saber cómo acceder mediante API, por favor revísalos.
En este blog explicaremos los puntos clave al implementar un ejemplo de notebook creado en ArcGIS Notebooks en ArcGIS Online para acceder a datos de rastreo obtenidos con Field Maps. El notebook de ejemplo está publicado en GitHub, así que si quieres revisar el contenido más detalladamente, por favor consúltalo.El notebook de ejemplo está disponible públicamente en GitHub con código organizado, así que si quieres revisar el contenido más detalladamente, por favor consúltalo.
- Acceso a datos de rastreo obtenidos con Field Maps
- Filtrar y verificar datos para un período específico
- Probar Spatially Enabled DataFrame
- Guardar los datos filtrados como Feature Layer (capa de entidades)
Aunque esto también está descrito en el notebook traducido mencionado arriba, las pistas en ArcGIS Online solo se almacenan durante 30 días. En esta ocasión, para poder usar los datos incluso después del período de almacenamiento, guardamos los datos como Feature Layer en ArcGIS Online.
Además, el rastreo de ubicación puede usarse con una suscripción válida aArcGIS Developer Subscription, utilizando el "Plan para organizaciones de ArcGIS Online (uso limitado para desarrollo y pruebas)", y hemos realizado rastreo con ArcGIS Field Maps.
Figura: Notebook de ejemplo
Explicación del punto clave
Aquí nos centraremos en explicar el código escrito en el notebook. Si tienes dudas sobre cómo usar ArcGIS Notebooks en ArcGIS Online, te recomendamos leer primero los siguientes artículos.
0) Acceso al módulo GIS
A continuación se genera automáticamente un módulo GIS al crear un nuevo ArcGIS Notebook en ArcGIS Online, y se usa tal cual para acceder a GIS.
from arcgis.gis import GIS
gis = GIS("home")
1) Acceso a datos de rastreo obtenidos con Field Maps
Cuando el rastreo de ubicación está habilitado en la organización, se crea un nuevo ítem llamado Servicio de rastreo de ubicación, y los datos de rastreo obtenidos con Field Maps se actualizan en este servicio.
El Servicio de rastreo de ubicación consta de dos capas: La primera capa llamada Tracks almacena el historial de ubicaciones pasadas de cada usuario; la segunda capa llamada Last Known Locations almacena la información más reciente sobre la ubicación actualizada por cada usuario que utiliza aplicaciones Tracker como Field Maps.
Puedes acceder fácilmente a estas capas usando LocationTrackingManager, pero esta vez usaremos solo la capa Tracks (tracks_layer).
from arcgis.apps.tracker import TrackView
# Acceder a LocationTrackingManager
location_tracking = gis.admin.location_tracking
# La capa Tracks es accesible desde la propiedad
tracks = location_tracking.tracks_layer
2) Filtrar por fecha y hora usando el campo location_timestamp desde la capa Tracks
La hora registrada en Tracks está en UTC, por lo que hay que tener cuidado al crear condiciones WHERE para filtrar.
(Al convertir hora JST a UTC, configura restando 9 horas a la hora JST)
Esta vez realizamos rastreo con Field Maps entre las 15:30 y las 19:00 del 10 de enero de 2022 hora JST. Por eso configuramos la condición WHERE para MapViewer convirtiendo esa hora JST a UTC restando 9 horas, quedando así:
(location_timestamp BETWEEN timestamp '2022-01-10 06:30:00' AND timestamp '2022-01-10 10:00:00') AND (1=1)
Con esta condición ejecutamos consulta FeatureLayer.query(), luego asignamos el valor devuelto a un objeto FeatureLayer.query(), y después accedemos a la propiedad del valor devuelto FeatureSet, llamado sdf, para obtener un sdf, que es un Spatially Enabled DataFrame. (SEDF)
# Establecer condición WHERE en tiempo UTC
wh = "(location_timestamp BETWEEN timestamp '2022-01-10 06:30:00' AND timestamp '2022-01-10 10:00:00') AND (1=1)"
# El valor devuelto por FeatureLayer.query() es FeatureSet,
# Se puede obtener SEDF desde FeatureSet property
query_tracks = tracks.query(where = wh, out_fields='*').sdf
3) Guardar los datos filtrados como Feature Layer (capa de entidades)
Spatially Enabled DataFrame (SEDF),to_featurelayer(), que es un método conveniente para guardar los datos filtrados como capa Feature Layer.
# Guardar como FeatureLayer los tracks del 10 enero 2022
lyr = query_tracks.spatial.to_featurelayer(title='tracks_20220110', tags='tracks')
Como ves, solo guardando como capa Feature Layer no necesitas escribir ni una línea más de código.
Pero eso no es muy interesante, así que aquí presentamos otro enfoque usando Pandas DataFrame para extraer, guardar y además probar visualización gráfica y mapas con esos datos.
2) Otro enfoque; extraer condiciones desde Pandas DataFrame para la capa Tracks
'Tracks layer' descrito en Help (Ayuda) es una FeatureLayer. Por eso primero leemos los datos a un DataFrame usando la función tracks_layer. Esta función es from_layer(), que lee datos desde una FeatureLayer a DataFrame.
# Leer capa Tracks a Spatially Enabled DataFrame (SEDF)
import pandas as pd
sdf = pd.DataFrame.spatial.from_layer(tracks)
Luego especificamos fecha y hora usando el campo location_timestamp para leer solo los datos correspondientes al rastreo realizado esta vez con Field Maps a otro DataFrame separado.
# Leer a DataFrame usando condición BETWEEN correspondiente a Feature Layer arriba mencionada
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) Operaciones comunes con Pandas DataFrame; visualización gráfica y mapas
'',''Como se presenta en ''Introducción al ArcGIS API for Python : Spatially Enabled DataFrame'', Spatially Enabled DataFrame (SEDF) inserta una clase espacial llamada spatial dentro del común Pandas DataFrame y proporciona funciones espaciales. Por eso puedes realizar operaciones comunes con Pandas DataFrame. En el notebook publicado en GitHub (próximamente enlazado), mostramos código probado para las siguientes operaciones pero aquí solo incluimos código hasta donde implementamos.'Introducción al ArcGIS API for Python : Spatially Enabled DataFrame' editado por ESRI Japan Development Team',''Como se presenta en ''Introducción al ArcGIS API for Python : Spatially Enabled DataFrame'', Spatially Enabled DataFrame (SEDF) inserta una clase espacial llamada spatial dentro del común Pandas DataFrame y proporciona funciones espaciales. Por eso puedes realizar operaciones comunes con Pandas DataFrame. En el notebook publicado en GitHub (próximamente enlazado), mostramos código probado para las siguientes operaciones pero aquí solo incluimos código hasta donde implementamos.'La operación estadística resumida',''La operación estadística resumida',''La operación estadística resumida',''La operación estadística resumida',''La operación estadística resumida',''La operación estadística resumida',''La operación estadística resumida',''La operación estadística resumida',''La operación estadística resumida',''La operación estadística resumida',''La operación estadística resumida',''La operación estadística resumida',''La operación estadística resumida',''La operación estadística resumida',''La operación estadística resumida',''La operación estadística resumida',''La operación estadística resumida',''La operación estadística resumida',''La operación estadística resumida',''La operación estadística resumida',''La operación estadística resumida',''# Calcular estadísticas descriptivas
describe query_sdf.describe()
#要約統計量の算出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 como guardar la pista del 10 de enero de 2022 lyr = query_sdf.spatial.to_featurelayer(title='tracks_20220110', tags='tracks')
Finalmente
En este artículo,ArcGIS Developer Subscription se utiliza el "Plan para organizaciones de ArcGIS Online (limitado a desarrollo y pruebas)" disponible, y se explica el punto al implementar un cuaderno de muestra para probar las siguientes operaciones en ArcGIS Notebooks.
- Acceso a datos de pista obtenidos con FieldMaps
- Filtrar y verificar datos de una fecha y hora específica
- Probar Spatially Enabled DataFrame
- Guardar los datos filtrados como Feature Layer
Para un análisis más avanzado de los datos de pista, consulte en Learn ArcGIS "Analizar datos de seguimiento obtenidos con ArcGIS Field Maps", que introduce análisis detallados y visualizaciones usando ArcGIS Pro para almacenar localmente los datos. Por favor, consulte para más detalles.
Además, para un análisis más avanzado con código, consulte en GitHub de Esri EE.UU. "Tracker Scripts", que presenta análisis avanzados y visualizaciones usando ArcGIS API for Python. Por favor, consulte para más detalles.
※ Cuando necesite extraer y analizar datos de seguimiento de su propia organización, ¡no olvide también hacer una copia de seguridad de los datos!
Lista de contenidos incluidos en "Analizar datos de seguimiento obtenidos con ArcGIS Field Maps" (a marzo de 2022)
・Verificar búsquedas con datos de seguimiento(artículo en inglés)
・Crear líneas de pista con datos de seguimiento(artículo en inglés)
・Crear animaciones usando datos de seguimiento de ubicación(artículo en inglés)
・Visualizar datos agregados de seguimiento(artículo en inglés)
Lista de cuadernos y scripts incluidos en "Tracker Scripts" (a marzo de 2022)
Cuadernos;
・Guía rápida (Quickstart Guide)
・Análisis básico de pistas (Basic Track Analysis)
・Análisis básico de pistas - PySpark (Basic Track Analysis - PySpark)
・Estado del seguimiento de ubicación (Location Tracking Status)
・Creación de líneas de pista (Creating Track Lines)
・Visualizar desviación de ruta (Visualize Route Deviance)
・Identificar edificios inspeccionados (Identify Inspected Buildings)
・Encontrar tiempos de permanencia en polígonos (Find Dwell Times at Polygons)
・Rastreo por proximidad (Proximity Tracing)
・Crear un servicio de mapa agregado (Create an Aggregated Map Service)
Scripts;
・Verificar ubicación editada (Check Edit Location) - Lea aquí el README (README here)
・Duplicar capa LKL (Mirror LKL Layer) - Lea aquí el README (README here)
・Limpieza de pistas poligonales (Polygon Cleanup Tracks) - Lea aquí el README (README here)
・Generar expresión Arcade para usuarios (Generate Users Arcade Expression) - Lea aquí el README (README here)
・Exportar pistas desde AGOL (Export Tracks From AGOL) - Lea aquí el README (README here)