Medición de distancias entre puntos simultáneos

9

Estoy trabajando con datos de GPS y tengo UTM con información de FECHA / Hora. Tengo 2 grupos de especies (alces y lobos). Quiero unir la información de alces a lobos que coinciden a tiempo. Entonces, la ubicación 1 del alce 1 fue el 26-03-2007 a las 14:33:49 para todos los lobos que se registraron aproximadamente al mismo tiempo. Aproximadamente es la clave: significa que tendré que tener una ventana de tiempo o un búfer para buscar todas las ubicaciones de lobos que se encontraban dentro de un búfer de 30 minutos en ese momento.

Estoy buscando una secuencia de comandos o herramienta que establezca un búfer de ventana +/- X min y pueda "procesar por lotes". Tengo al menos 30 alces y 30 lobos, por lo que hacer la combinación de un par a la vez no es útil. Una vez que coincida la fecha / hora, quiero calcular la distancia entre las ubicaciones XY de alces y lobos y la diferencia en el tiempo. Me gustaría una salida como:

individualmooseID | mooseDate | mooseX | mooseY | individualwolfID | wolfDate | wolfX | wolfY | Distance(m) | TimeDiff (min)

El ID de alce puede coincidir con varios ID de lobo DIFERENTES para el mismo período de tiempo. Cualquier sugerencia sera apreciada. He escrito un código para R pero no funciona, vea mi pregunta: https://stackoverflow.com/q/15646365/675742 y tendré que llevar los datos a ArcGIS en algún momento, así que si puedo omitir R y hacerlo ¡todo en ArcGIS entonces GENIAL!

Kerry
fuente
44
Hice esto con éxito hace mucho tiempo creando dos capas cuyas coordenadas eran el tiempo más un valor artificial y , con y = 0 para un conjunto de datos y y = alguna constante para el otro conjunto de datos. En este punto, puede utilizar combinaciones espaciales, almacenamiento en búfer y otras formas de análisis espacial para responder a su pregunta, porque la proximidad en estas coordenadas artificiales es lo mismo que la proximidad en el tiempo.
whuber

Respuestas:

4

Conjuntos de datos como este pueden dar mucha información, por supuesto.

Haría esto en un entorno de base de datos espacial, preferiblemente PostgreSQL / PostGIS.

Lo que desea hacer parece una simple unión en datos espaciales y de tiempo.

Luego haces todo en una consulta. La parte difícil podría ser optimizar los índices para el momento de unirse. Supongo que los conjuntos de datos son bastante grandes.

La consulta puede verse más o menos así (léala como pseudocódigo, especialmente la parte de tiempo)

SELECT DISTINCT ON (moose_id, wolf_id, moose_time) 
moose_id, moose_geom, moose_time, wolf_id, wolf_geom, wolf_time,
ST_Distance(moose_geom, wolf_geom) as dist, moose_time-wolf_time as time_diff
FROM
moose_table as mt inner join wolf_table as wt 
on 
ST_DWithin(moose_geom, wolf_geom,10000) 
AND moose_time > ( wolf_time-30) 
AND moose_time < (wolf_time + 30) 
ORDER BY abs(time_diff), moose_id, wolf_id, moose_time;

dos notas:
1) Utilicé ST_DWithin para restringir el emparejamiento de moos lobo que está más cerca de 10000 metros. Esa es una manera de disminuir el cálculo y no calcular todas las combinaciones posibles.
2) Usé DISTINCT ON. Para cada combinación de alce y lobo en cada registro de tiempo de alce, debe obtener solo la distancia cuando estaban más cerca en el tiempo.

Pero veo varias otras consultas interesantes para probar en su conjunto de datos que deberían proporcionar información interesante sobre la forma en que los lobos cazan los alces.

Por ejemplo, puede, en lugar de encontrar la distancia entre el lobo y el alce cuando están lo más cerca posible a tiempo, averiguar cuándo están lo más cerca posible del espacio. Eso es solo reorganizar el pedido. Luego, en los casos en que el lobo está siguiendo al alce, verás qué tan atrás en el tiempo está el lobo. Por supuesto, serán valores aproximados, ya que supongo que los lobos no solo rastrean sino que también pasan por el olor a la deriva del viento, sino que en algunos casos verán qué tan atrás está el lobo y cómo está cambiando eso. Junto con la velocidad del lobo y el alce, eso podría dar un buen patrón de lo que está sucediendo.

La velocidad que, por supuesto, obtienes de otra consulta simple :-)

Por lo tanto, coloque las tablas en una base de datos postgis y haga el trabajo allí.

Si está utilizando ArcGIS 10 o 10.1, puede ver los datos directamente desde la base de datos. O de QGIS. Esa es una combinación más madura PostGIS-QGIS.

Nicklas Avén
fuente