Pomiar odległości między punktami jednocześnie

9

Pracuję z danymi GPS, więc mam UTM z danymi DATA / Czas. Mam 2 grupy gatunków (łoś i wilki). Chcę połączyć informacje od łosia po wilki, które pasują do siebie w czasie. Lokalizacja 1 od łosia 1 znajdowała się w dniu 26.03.2007 14:33:49 dla wszystkich wilków, które zostały zarejestrowane w przybliżeniu w tym samym czasie. W przybliżeniu jest kluczem - oznacza to, że będę musiał mieć okno czasowe lub bufor, aby wyszukać wszystkie lokalizacje wilków, które były w tym czasie w ciągu 30 minut.

Szukam skryptu lub narzędzia, które ustawi bufor okna +/- X min i będzie w stanie „wsadować” proces. Mam co najmniej 30 łosi i 30 wilków - więc dopasowanie jednej pary na raz nie jest pomocne. Po dopasowaniu daty i godziny chcę obliczyć odległość między lokalizacjami XY łosia i wilka oraz różnicę czasu. Chciałbym wyjście takie jak:

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

MooseID może pasować do kilku RÓŻNYCH identyfikatorów wolfID w tym samym okresie. Wszelkie sugestie będą mile widziane. Napisałem kod dla R, ale to nie działa, patrz moje pytanie: https://stackoverflow.com/q/15646365/675742 i będę musiał przenieść dane do ArcGIS w pewnym momencie, więc jeśli mogę pominąć R i zrobić wszystko w ArcGIS, a potem WIELKI!

Kerry
źródło
4
Udało mi się to już dawno temu, tworząc dwie warstwy, których współrzędnymi były czas plus sztuczna wartość y , przy czym y = 0 dla jednego zestawu danych, a y = jakaś stała dla drugiego zestawu danych. W tym momencie możesz użyć połączeń przestrzennych, buforowania i innych form analizy przestrzennej, aby odpowiedzieć na twoje pytanie, ponieważ odległość w tych sztucznych współrzędnych jest taka sama jak odległość w czasie.
whuber

Odpowiedzi:

4

Takie zestawy danych mogą oczywiście dostarczyć bardzo dużo informacji.

Zrobiłbym to w przestrzennym środowisku bazy danych, najlepiej PostgreSQL / PostGIS.

To, co chcesz zrobić, wydaje się prostym połączeniem danych przestrzennych i czasowych.

Następnie robisz wszystko w jednym zapytaniu. Trudną częścią może być optymalizacja indeksów na czas dołączania. Wydaje mi się, że zestawy danych są dość duże.

Zapytanie może wyglądać mniej więcej tak (odczytaj go jako pseudo kod, zwłaszcza część czasu))

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;

dwie notatki:
1) Użyłem ST_DWithin, aby ograniczyć parowanie wilczych łosi, które są bliżej niż 10000 metrów. Jest to sposób na zmniejszenie obliczeń i nie obliczanie każdej możliwej kombinacji.
2) Użyłem DISTINCT ON. Dla każdej kombinacji łosia i wilka przy każdej rejestracji czasu na łosia powinieneś otrzymać tylko odległość, gdy były one najbardziej zbliżone w czasie.

Widzę jednak kilka innych interesujących zapytań do przetestowania na twoim zestawie danych, które powinny dostarczyć interesujących informacji o tym, jak wilki polują na łosie.

Na przykład możesz, zamiast znaleźć odległość między wilkiem a łośem, gdy są one jak najbliżej, z czasem dowiedzieć się, kiedy są jak najbliżej przestrzennie. To tylko zmiana kolejności. Następnie, w przypadkach, gdy wilk podąża za łośem, zobaczysz, jak daleko w czasie jest wilk. Oczywiście będą to wartości przybliżone, ponieważ wydaje mi się, że wilki nie tylko śledzą, ale także podążają za wiatrem, ale w niektórych przypadkach zobaczysz, jak daleko za wilkiem jest i jak to się zmienia. W połączeniu z prędkością wilka i łosia może to dać dobry obraz tego, co się dzieje.

Szybkość, którą oczywiście otrzymujesz z innego prostego zapytania :-)

Umieść tabele w bazie danych Postgis i wykonaj tam pracę.

Jeśli korzystasz z ArcGIS 10 lub 10.1, możesz oglądać dane bezpośrednio z bazy danych. Lub z QGIS. To jest bardziej dojrzała kombinacja PostGIS-QGIS.

Nicklas Avén
źródło