Измерение расстояний между одновременными точками


9

Я работаю с данными GPS, поэтому у меня есть UTM с информацией ДАТА / Время. У меня есть 2 группы видов (лоси и волки). Я хочу объединить информацию от лосей к волкам, которые совпадают во времени. Итак, локация 1 от лося 1 была в 2007-03-26 14:33:49 для всех волков, которые были зарегистрированы примерно в одно и то же время. Приблизительно это ключ - это значит, что мне нужно будет временное окно или буфер для поиска всех местоположений волков, которые были в пределах 30-минутного буфера примерно в это время.

Я ищу скрипт или инструмент, который установит буфер окна +/- X мин и сможет "пакетно" обрабатывать. У меня есть как минимум 30 лосей и 30 волков - поэтому сопоставлять по одной паре за раз не полезно. Как только я сопоставлю дату и время, я хочу вычислить расстояние между точками XY лося и волка и разницу во времени. Я хотел бы вывод, как:

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

MooseID может совпадать с несколькими РАЗЛИЧНЫМИ wolfID за один и тот же период времени. Мы ценим любые предложения. Я написал код для R, но он не работает, см. Мой вопрос: https://stackoverflow.com/q/15646365/675742, и в какой-то момент мне придется перенести данные в ArcGIS, так что если я смогу пропустить R и сделать все это в ArcGIS, то БОЛЬШОЕ!


4
Я успешно сделал это давным-давно, создав два слоя, координатами которых были время плюс искусственное значение y , с y = 0 для одного набора данных и y = некоторая константа для другого набора данных. На этом этапе вы можете использовать пространственные объединения, буферизацию и другие формы пространственного анализа, чтобы ответить на ваш вопрос, потому что близость в этих искусственных координатах такая же, как близость во времени.
whuber

Ответы:


4

Подобные наборы данных, конечно, могут дать очень много информации.

Я хотел бы сделать это в среде пространственной базы данных, предпочтительно PostgreSQL / PostGIS.

То, что вы хотите сделать, похоже на простое объединение как пространственных, так и временных данных.

Затем вы делаете все в одном запросе. Сложнее всего было бы оптимизировать индексы для времени объединения. Я думаю, наборы данных довольно большие.

Запрос может выглядеть примерно так (читается как псевдокод, особенно часть времени))

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;

две заметки:
1) Я использовал ST_DWithin, чтобы ограничить спаривание волчьих лосей ближе 10000 метров. Это способ уменьшить расчет и не рассчитывать каждую возможную комбинацию.
2) Я использовал DISTINCT ON. Для каждой комбинации лося-волка при каждой регистрации лося вы должны получать только расстояние, когда они были наиболее близки по времени.

Но я вижу несколько других интересных запросов для проверки вашего набора данных, которые должны дать интересную информацию о том, как волки охотятся на лося.

Например, вы можете вместо того, чтобы находить расстояние между волком и лосем, когда они находятся как можно ближе во времени, выяснить, когда они находятся как можно ближе к пространству. Это просто переставляет порядок. Затем, в случаях, когда волк следует за лосем, вы увидите, насколько далеко позади волк. Конечно, это будут грубые значения, так как я предполагаю, что волки не только следуют, но и следуют запаху ветра, но в некоторых случаях вы увидите, как далеко позади волка, и как это меняется. Вместе со скоростью волка и лося, это может дать хорошую картину того, что происходит.

Скорость вы, конечно, получаете от другого простого запроса :-)

Итак, поместите ваши таблицы в базу данных postgis и сделайте всю работу там.

Если вы используете ArcGIS 10 или 10.1, вы можете просматривать данные непосредственно из базы данных. Или из QGIS. Это более зрелая комбинация PostGIS-QGIS.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.