Misurare le distanze tra punti simultanei


9

Sto lavorando con i dati GPS e quindi ho UTM con DATE / Informazioni sul tempo. Ho 2 gruppi di specie (alci e lupi). Voglio unire le informazioni dagli alci ai lupi che corrispondono in tempo. Quindi, la posizione 1 da Moose 1 era al 26-03-2007 14:33:49 a tutti i lupi registrati approssimativamente nello stesso momento. Approssimativamente è la chiave - significa che dovrò avere una finestra temporale o un buffer per cercare tutte le posizioni dei lupi entro un intervallo di 30 minuti in quel periodo.

Sto cercando uno script o uno strumento che imposterà un buffer di finestra +/- X min e sarà in grado di "batch" processo. Ho almeno 30 alci e 30 lupi, quindi fare una coppia alla volta non è utile. Una volta che ho ottenuto la data / ora abbinata, voglio quindi calcolare la distanza tra le posizioni XY di alci e lupo e la differenza nel tempo. Vorrei un output come:

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

Il mooseID può corrispondere a diversi DIFFERENTI wolfID per lo stesso periodo di tempo. Tutti i suggerimenti sarebbero apprezzati. Ho scritto un codice per R ma non funziona, vedi la mia domanda: https://stackoverflow.com/q/15646365/675742 e dovrò portare i dati in ArcGIS a un certo punto, quindi se posso saltare R e farlo tutto in ArcGIS quindi GRANDE!


4
L'ho fatto con successo molto tempo fa creando due livelli le cui coordinate erano tempo più un valore artificiale y , con y = 0 per un set di dati e y = una costante per l'altro set di dati. A questo punto puoi usare join spaziali, buffering e altre forme di analisi spaziale per rispondere alla tua domanda, perché la vicinanza a queste coordinate artificiali è la stessa della vicinanza nel tempo.
whuber

Risposte:


4

Set di dati come questo possono ovviamente fornire molte informazioni.

Lo farei in un ambiente di database spaziale, preferibilmente PostgreSQL / PostGIS.

Quello che vuoi fare sembra una semplice unione di dati spaziali e temporali.

Quindi fai tutto in una query. La parte difficile potrebbe essere quella di ottimizzare gli indici per il tempo di unione. Immagino che i set di dati siano piuttosto grandi.

La query può assomigliare a questa (leggila come pseudo codice, in particolare la parte temporale))

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;

due note:
1) Ho usato ST_DWithin per vincolare l'associazione di alci di lupo che è più vicina di 10000 metri. Questo è un modo per ridurre il calcolo e non calcolare ogni possibile combinazione.
2) Ho usato DISTINCT ON. Per ogni combinazione di alci-lupo su ogni registrazione del tempo di alci dovresti ottenere solo la distanza quando erano più vicini nel tempo.

Ma vedo diverse altre query interessanti da testare sul tuo set di dati che dovrebbero fornire informazioni interessanti sul modo in cui i lupi cacciano le alci.

Ad esempio puoi, invece di trovare la distanza tra il lupo e l'alce quando sono il più vicino possibile nel tempo, scoprire quando sono il più vicino possibile nello spazio. Questo è solo riordinare l'ordinamento. Quindi, nei casi in cui il lupo sta seguendo l'alce, vedrai quanto è indietro nel tempo il lupo. Ovviamente saranno valori approssimativi poiché immagino che i lupi non solo seguano il percorso, ma passino anche attraverso l'odore del vento che va alla deriva, ma in alcuni casi vedrai quanto è distante il lupo e come sta cambiando. Insieme alla velocità del lupo e dell'alce, ciò potrebbe dare un buon modello di ciò che sta succedendo.

La velocità che ottieni ovviamente da un'altra semplice query :-)

Quindi, metti le tue tabelle in un database postgis e fai il lavoro lì.

Se si utilizza ArcGIS 10 o 10.1, è possibile guardare i dati direttamente dal database. O da QGIS. Questa è una combinazione più matura PostGIS-QGIS.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.