Mesurer les distances entre des points simultanés


9

Je travaille avec des données GPS et j'ai donc des UTM avec des informations DATE / Time. J'ai 2 groupes d'espèces (orignaux et loups). Je veux joindre les informations de l'orignal aux loups qui correspondent dans le temps. Ainsi, l'emplacement 1 de l'orignal 1 était le 2007-03-26 14:33:49 pour tous les loups qui ont été enregistrés à peu près au même moment. Est approximativement la clé - cela signifie que je devrai avoir une fenêtre de temps ou un tampon pour rechercher tous les emplacements des loups qui étaient dans un tampon de 30 minutes à cette époque.

Je suis à la recherche d'un script ou d'un outil qui définira un tampon de fenêtre +/- X min et pourra "traiter" par lots. J'ai au moins 30 orignaux et 30 loups - il n'est donc pas utile de faire correspondre une paire à la fois. Une fois que j'ai obtenu la correspondance date / heure, je veux ensuite calculer la distance entre les emplacements XY de l'orignal et du loup et la différence de temps. Je voudrais une sortie comme:

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

Le mooseID peut correspondre à plusieurs DIFFÉRENTS wolfID pour la même période. Toute suggestion serait appréciée. J'ai écrit un code pour R mais cela ne fonctionne pas voir ma question: https://stackoverflow.com/q/15646365/675742 et je devrai importer les données dans ArcGIS à un moment donné, donc si je peux ignorer R et faire le tout dans ArcGIS puis GRAND!


4
J'ai réussi cela il y a longtemps en créant deux couches dont les coordonnées étaient le temps plus une valeur artificielle y , avec y = 0 pour un ensemble de données et y = une constante pour l'autre ensemble de données. À ce stade, vous pouvez utiliser les jointures spatiales, la mise en mémoire tampon et d'autres formes d'analyse spatiale pour répondre à votre question, car la proximité dans ces coordonnées artificielles est identique à la proximité dans le temps.
whuber

Réponses:


4

Des ensembles de données comme celui-ci peuvent bien sûr donner beaucoup d'informations.

Je le ferais dans un environnement de base de données spatiales, de préférence PostgreSQL / PostGIS.

Ce que vous voulez faire semble être une simple jonction sur les données spatiales et temporelles.

Ensuite, vous faites tout en une seule requête. La partie délicate pourrait être d'optimiser les index pour la jonction temporelle. Je suppose que les ensembles de données sont assez volumineux.

La requête peut ressembler à ceci (lisez-la en tant que pseudo-code, en particulier la partie temporelle))

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;

deux notes:
1) J'ai utilisé ST_DWithin pour limiter l'appariement des loups et des orignaux qui est plus proche que 10000 mètres. C'est une façon de diminuer le calcul et de ne pas calculer toutes les combinaisons possibles.
2) J'ai utilisé DISTINCT ON. Pour chaque combinaison orignal-loup sur chaque enregistrement de temps d'orignal, vous ne devriez obtenir que la distance quand ils étaient les plus proches dans le temps.

Mais je vois plusieurs autres requêtes intéressantes à tester sur votre ensemble de données qui devraient donner des informations intéressantes sur la façon dont les loups chassent les orignaux.

Par exemple, vous pouvez, au lieu de trouver la distance entre le loup et l'orignal lorsqu'ils sont aussi proches que possible dans le temps, savoir quand ils sont aussi proches que possible spatialement. C'est juste réorganiser la commande. Ensuite, dans les cas où le loup suit l'orignal, vous verrez à quel point le loup est en retard. Bien sûr, ce seront des valeurs approximatives car je suppose que les loups suivent non seulement l'odeur du vent, mais aussi la suivent, mais dans certains cas, vous verrez à quelle distance se trouve le loup et comment cela change. Avec la vitesse du loup et de l'orignal, cela pourrait donner un bon aperçu de ce qui se passe.

La vitesse que vous obtenez bien sûr à partir d'une autre requête simple :-)

Alors, mettez vos tables dans une base de données Postgis et faites le travail là-bas.

Si vous utilisez ArcGIS 10 ou 10.1, vous pouvez regarder les données directement à partir de la base de données. Ou depuis QGIS. Il s'agit d'une combinaison PostGIS-QGIS plus mature.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.