Para começar
Ao realizar uma pesquisa de campo, que tal usar dados de rastreamento de localização?Dados de rastreamento de localização são uma funcionalidade disponível em toda a organização do ArcGIS Online (ou ArcGIS Enterprise), que oferece aos usuários a capacidade de registrar suas localizações atuais e passadas.
Se você nunca usou ou não sabe o que são dados de rastreamento de localização, ou como usar o ArcGIS Field Maps, recentementecoleção de recursos do ArcGIS adicionouum guia inicial do ArcGIS Field Maps, então confira-os.
Por outro lado, o método para gerenciar funcionalidades de rastreamento de localização e acessar dados usando ArcGIS API for Python é explicado no Help comoGerenciando aplicativos ArcGIS - Configurando Rastreamento de Localização e também há um notebook com o mesmo conteúdo publicado comoConfigurando Rastreamento de Localização e Visualizações de Rastreamento para Sua Organização, e esse notebook traduzido também está disponível publicamente, então se você quiser saber como acessar via API, consulte-os.
Neste blog, explicarei os pontos da implementação do exemplo do notebook criado no ArcGIS Notebooks no ArcGIS Online para testar as operações. O exemplo do notebook está publicado no GitHub com código organizado, então se quiser detalhes, consulte-o.publicado no GitHub, então confira-os para mais detalhes.
- Acesso a dados de rastreamento obtidos com Field Maps
- Filtrando e confirmando dados em datas específicas
- Testando Spatially Enabled DataFrame
- Salvando os dados filtrados como Feature Layer (camada de feição) Nota: Embora isso também esteja descrito no notebook traduzido acima, as trilhas do ArcGIS Online são armazenadas apenas por 30 dias. Portanto, para usar os dados mesmo após o período de armazenamento, eles são salvos como Feature Layer no ArcGIS Online.
Além disso, os dados de rastreamento de localização podem ser usados com um plano pago chamadoArcGIS Developer Subscription, que permite usar o "Plano para organizações do ArcGIS Online (uso limitado para desenvolvimento e teste)" e realizar rastreamento com ArcGIS Field Maps.
Figura: Exemplo do notebook
Explicação dos pontos
Aqui focaremos na explicação do código escrito no notebook. Se você estiver inseguro sobre como usar o ArcGIS Notebooks no ArcGIS Online, recomendamos ler primeiro os seguintes artigos.
0) Acesso ao módulo GIS
A seguir, quando um novo ArcGIS Notebook é criado no ArcGIS Online, ele é automaticamente gerado e acessa o módulo GIS, então usaremos isso diretamente.
from arcgis.gis import GIS
gis = GIS("home")
1) Acesso aos dados de rastreamento obtidos com Field Maps
Quando o rastreamento de localização é ativado na organização, um novo item chamado Serviço de Rastreamento de Localização é criado, e os dados de rastreamento obtidos pelo FieldMaps são atualizados nesse serviço.
O Serviço de Rastreamento de Localização consiste em duas camadas: a primeira camada chamada Tracks armazena o histórico das informações das localizações passadas dos usuários; a segunda camada chamada Last Known Locations armazena as informações mais recentes das localizações dos usuários que utilizam aplicativos móveis Tracker como Field Maps.
Essas camadas podem ser acessadas facilmente através do LocationTrackingManager, mas neste caso usaremos apenas a camada Tracks (tracks_layer).
from arcgis.apps.tracker import TrackView
# Acessando LocationTrackingManager
location_tracking = gis.admin.location_tracking
# A camada Tracks pode ser acessada pelo proprietário
tracks = location_tracking.tracks_layer
2) Filtragem por data e hora usando o campo location_timestamp da camada Tracks
Como o tempo registrado nas Tracks está em UTC, é necessário cuidado ao criar a cláusula where para filtragem.
(Ao converter horário JST para UTC, defina o horário subtraindo 9 horas do horário JST)
Desta vez, o rastreamento realizado pelo Field Maps foi entre 15:30 e 19:00 do dia 10/01/2022 no horário JST. Portanto, ao configurar a cláusula where no MapViewer referenciando esse horário convertido para UTC subtraindo 9 horas do horário JST, fica assim:
(location_timestamp BETWEEN timestamp '2022-01-10 06:30:00' AND timestamp '2022-01-10 10:00:00') AND (1=1)
Com a cláusula acima, realizamos consulta com FeatureLayer.query() e armazenamos o valor retornado em um objeto FeatureSet; depois convertemos esse FeatureSet em Spatially Enabled DataFrame (SEDF) usando a propriedade sdf.FeatureLayer.query() para consulta e depois a propriedade FeatureSetsdf para obter SEDF., então Spatially Enabled DataFrame (SEDF).
# Definindo cláusula where em horário UTC
wh = "(location_timestamp BETWEEN timestamp '2022-01-10 06:30:00' AND timestamp '2022-01-10 10:00:00') AND (1=1)"
# O valor retornado por FeatureLayer.query() é FeatureSet,
# podemos obter SEDF pela propriedade sdf
query_tracks = tracks.query(where = wh, out_fields='*').sdf
3) Salvando os dados filtrados como Feature Layer (camada de feição)
Spatially Enabled DataFrame (SEDF), to_featurelayer() é um método conveniente que existe,
utilizaremos ele para salvar como camada Feature Layer.
# Salvando a trilha do dia 10/01/2022 como FeatureLayer
lyr = query_tracks.spatial.to_featurelayer(title='tracks_20220110', tags='tracks')
Como mostrado acima,
basta salvar como camada Feature Layer sem escrever nem 10 linhas de código.
Só isso não é muito interessante,
então aqui apresento outro método usando Pandas DataFrame para extrair, salvar e até tentar exibir graficamente ou em mapa os dados filtrados.
2)' Outro método; extração condicional da camada Tracks em Pandas DataFrame
Como descrito no Help na camada Tracks (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 como trilha de 10 de janeiro de 2022 lyr = query_sdf.spatial.to_featurelayer(title='tracks_20220110', tags='tracks')
Por fim
Neste artigo,ArcGIS Developer Subscription utilizamos o plano "ArcGIS Online para organizações (restrito a desenvolvimento e teste)" disponível no ArcGIS Developer Subscription para demonstrar as operações seguintes em ArcGIS Notebooks.
- Acesso aos dados de trilha obtidos com FieldMaps
- Filtrar e verificar dados de data e hora específicos
- Testar Spatially Enabled DataFrame
- Salvar os dados filtrados como Feature Layer
Para análises mais avançadas dos dados de trilha, consulte o tutorial "Analisando dados de rastreamento obtidos com ArcGIS Field Maps", que inclui armazenamento local dos dados e análise visual detalhada usando ArcGIS Pro.
Além disso, para análises mais avançadas via código, consulte no GitHub da Esri EUA o repositório "Tracker Scripts", que apresenta análises avançadas e visualizações usando ArcGIS API for Python.
※ Ao analisar os dados de trilha da sua própria organização, não esqueça de atualizar os dados!
Lista de conteúdos incluídos em "Analisando dados de rastreamento obtidos com ArcGIS Field Maps" (março de 2022)
・Verificar pesquisas em dados de rastreamento(artigo em inglês)
・Criar linhas de trilha a partir dos dados de rastreamento(artigo em inglês)
・Criar animações usando dados de rastreamento de localização(artigo em inglês)
・Visualizar dados agregados de rastreamento(artigo em inglês)
Lista de notebooks e scripts incluídos em "Tracker Scripts" (março de 2022)
Notebooks;
・Guia Rápido (Quickstart Guide)
・Análise Básica de Trilhas (Basic Track Analysis)
・Análise Básica de Trilhas - PySpark (Basic Track Analysis - PySpark)
・Status do Rastreamento de Localização (Location Tracking Status)
・Criando Linhas de Trilha (Creating Track Lines)
・Visualizar Desvios da Rota (Visualize Route Deviance)
・Identificar Edifícios Inspecionados (Identify Inspected Buildings)
・Encontrar Tempos de Permanência em Polígonos (Find Dwell Times at Polygons)
・Rastreamento por Proximidade (Proximity Tracing)
・Criar um Serviço de Mapa Agregado (Create an Aggregated Map Service)
Scripts;
・Verificar Local da Edição (Check Edit Location) - Leia-me aqui (README here)
・Espelhar Camada LKL (Mirror LKL Layer) - Leia-me aqui (README here)
・Limpeza de Polígonos das Trilhas (Polygon Cleanup Tracks) - Leia-me aqui (README here)
・Gerar Expressão Arcade para Usuários (Generate Users Arcade Expression) - Leia-me aqui (README here)
・Exportar Trilhas do AGOL (Export Tracks From AGOL) - Leia-me aqui (README here)