Comecei a trabalhar com bancos de dados espaciais e quero escrever uma consulta SQL (PostGIS) para generalização automática de trilhas GPS brutas (com frequência de rastreamento fixa). A primeira coisa em que estou trabalhando é uma consulta que identifica pontos de parada na forma de consulta como "x pontos a uma distância de y metros" para substituir nuvens de pontos maciças por pontos representativos. Eu já percebi encaixar pontos a uma certa distância e contar os encaixados. Na figura abaixo, é possível ver uma trilha de exemplo bruto (pequenos pontos pretos) e o centro dos pontos quebrados como círculos coloridos (tamanho = número de pontos quebrados).
CREATE table simplified AS
SELECT count(raw.geom)::integer AS count, st_centroid(st_collect(raw.geom)) AS center
FROM raw
GROUP BY st_snaptogrid(raw.geom, 500, 0.5)
ORDER BY count(raw.geom) DESC;
Eu ficaria muito satisfeito com esta solução, mas existe o problema do tempo: imaginar a pista como uma pista de dia inteiro em uma cidade em que a pessoa pode retornar a lugares já visitados anteriormente. No meu exemplo, o círculo azul escuro representa a casa da pessoa que ele visitou duas vezes, mas é claro que minha pergunta ignora isso.
Nesse caso, a consulta sofisticada deve coletar apenas pontos com registros de data e hora contíguos (ou IDs), para que produza aqui dois pontos representativos. Minha primeira ideia foi uma modificação da minha consulta para uma versão 3d (tempo como terceira dimensão), mas parece não funcionar.
Alguém tem algum conselho para mim? Espero que minha pergunta seja clara.
Obrigado pela ideia da linha. Eu percebi fazer e simplificar uma cadeia de linhas, como você pode ver na captura de tela abaixo (pontos são pontos originais). O que eu ainda preciso é determinar os locais de descanso (> x pontos em <x metros de raio), idealmente como um ponto com um horário de chegada e um horário de saída ... outras idéias?