Medindo distâncias entre pontos simultâneos

9

Estou trabalhando com dados de GPS e, portanto, tenho UTMs com informações de DATA / Hora. Eu tenho 2 grupos de espécies (alces e lobos). Quero juntar as informações de alce a lobos que combinam com o tempo. Portanto, o local 1 do alce 1 estava em 26-03-2007 14:33:49 para todos os lobos que foram registrados aproximadamente ao mesmo tempo. Aproximadamente é a chave - significa que terei que ter uma janela de tempo ou buffer para procurar todos os locais de lobo que estavam dentro de 30 minutos de buffer nesse período.

Estou procurando por um script ou ferramenta que defina um buffer de janela +/- X min e seja capaz de processar em lote. Eu tenho pelo menos 30 alces e 30 lobos - fazer o par correspondente de cada vez não é útil. Depois de corresponder a data / hora, desejo calcular a distância entre os locais XY de alce e lobo e a diferença de tempo. Gostaria de uma saída como:

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

O mooseID pode corresponder a vários wolfIDs DIFERENTES pelo mesmo período de tempo. Todas as sugestões serão apreciadas. Eu escrevi um código para R, mas não está funcionando, veja minha pergunta: https://stackoverflow.com/q/15646365/675742 e terei que trazer os dados para o ArcGIS em algum momento, para que eu possa pular R e fazer tudo no ArcGIS, então, ÓTIMO!

Kerry
fonte
4
Fiz isso com sucesso há muito tempo, criando duas camadas cujas coordenadas eram o tempo mais um valor artificial y , com y = 0 para um conjunto de dados e y = alguma constante para o outro conjunto de dados. Nesse ponto, você pode usar junções espaciais, buffer e outras formas de análise espacial para responder à sua pergunta, porque a proximidade nessas coordenadas artificiais é a mesma que a proximidade no tempo.
whuber

Respostas:

4

Conjuntos de dados como esse podem fornecer muitas informações, é claro.

Eu faria isso em um ambiente de banco de dados espacial, preferencialmente PostgreSQL / PostGIS.

O que você deseja fazer parece uma simples junção de dados espaciais e de tempo.

Então você faz tudo em uma consulta. A parte complicada pode ser otimizar os índices para o ingresso no tempo. Eu acho que os conjuntos de dados são bastante grandes.

A consulta pode se parecer com isso (leia-o como pseudo-código, especialmente a parte do tempo))

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;

duas notas:
1) Eu usei ST_DWithin para restringir o emparelhamento de lobo-lobo que está mais perto do que 10000 metros. Essa é uma maneira de diminuir o cálculo e não calcular todas as combinações possíveis.
2) Eu usei DISTINCT ON. Para cada combinação de alce-lobo em cada registro de tempo do alce, você deve ter apenas a distância em que estavam mais próximos no tempo.

Mas vejo várias outras consultas interessantes para testar em seu conjunto de dados que devem fornecer informações interessantes sobre a maneira como os lobos caçam os alces.

Por exemplo, você pode, em vez de encontrar a distância entre o lobo e o alce quando estiver o mais próximo possível do tempo, descobrir quando estiver o mais próximo possível espacialmente. Isso está apenas reorganizando a encomenda. Então, nos casos em que o lobo estiver seguindo o alce, você verá o quão atrasado o tempo está. É claro que serão valores grosseiros, já que acho que os lobos não apenas rastreiam, mas também passam pelo cheiro do vento, mas, em alguns casos, você verá a que distância o lobo está e como isso está mudando. Juntamente com a velocidade do lobo e do alce, isso pode dar um bom padrão do que está acontecendo.

A velocidade que você obtém de outra consulta simples :-)

Então, coloque suas tabelas em um banco de dados postgis e faça o trabalho lá.

Se você estiver usando o ArcGIS 10 ou 10.1, poderá assistir os dados diretamente do banco de dados. Ou do QGIS. Essa é uma combinação mais madura do PostGIS-QGIS.

Nicklas Avén
fonte