Preciso encontrar um algoritmo ou método que possa detectar latitude
longitude
pontos extremos em uma trajetória durante o pós-processamento , que poderá ser corrigido (trazido de volta ao caminho da trajetória com base em seus vizinhos).
Como exemplo do tipo de pontos extremos que gostaria de detectar e corrigir, anexei uma imagem demonstrando:
Tentei usar um filtro Kalman sem cheiro para suavizar os dados da melhor maneira possível, mas isso parece não funcionar de maneira eficaz o suficiente para valores extremos mais extremos (dados brutos em azul, dados suavizados em vermelho):
Meu UKF pode não estar calibrado corretamente (mas tenho certeza de que está).
As trajetórias são as de caminhantes, corredores, ciclistas - movimentos movidos a humanos que podem começar e parar, mas não mudam drasticamente a velocidade ou a posição de maneira rápida ou repentina.
Uma solução que não depende de dados de temporização (e apenas de dados de posição) seria extremamente útil (pois os dados que estão sendo processados nem sempre podem conter dados de temporização). No entanto, estou ciente de quão improvável é esse tipo de solução, então estou igualmente feliz por ter qualquer solução!
Idealmente, a solução detectaria o outlier para que pudesse ser corrigido, resultando em uma trajetória corrigida:
Recursos que eu examinei:
Smooth GPS data
- /programming/1134579/smooth-gps-dataCommon GPS and Geospatial Tracking Challenges and Solutions
- http://www.toptal.com/gis/adventures-in-gps-track-analytics-a-geospatial-primer (a solução parece perder a precisão dos dados)Qual algoritmo devo usar para remover valores discrepantes nos dados de rastreamento?
Algoritmo que eu uso.
Como se pode ver, isso pode fazer uma curva acentuada.
Eu tenho implementação python ArcGIS do algoritmo acima, ele usa o módulo networkx. Informe-me se isso for interessante e atualizarei minha resposta com o script
ATUALIZAR:
fonte
Uma idéia é criar um script que lista os ângulos (e talvez o comprimento também) de cada segmento do seu caminho. Agora você pode comparar os valores de cada segmento com seus vizinhos diretos (e possivelmente os segundos vizinhos também para aumentar a precisão) e selecionar todos os pontos em que os valores excedem um determinado valor threashold. Finalmente, basta excluir os pontos do seu caminho.
fonte
Também vale a pena observar o método Median-5.
Cada coordenada x (ou y) é definida como a mediana dos valores de 5 x (ou y) ao seu redor em sequência (isto é, ela própria, os dois valores anteriores e os dois valores subsequentes).
por exemplo, x3 = mediana (x1, x2, x3, x4, x5) y3 = mediana (y1, y2, y3, y4, y5) etc.
O método é rápido e também é fácil de usar no streaming de dados.
fonte
Existem alguns dados bons nesta pergunta / respostas.
Embora tudo dependa de como seus pontos estão agrupados no que vai / não vai funcionar. Você precisará ter cuidado com os pontos que estão espalhados, mas não estranhos.
fonte
Você pode importar seus dados para o Excel ou usar pandas e sinalizadores e / ou excluir todas as distâncias do ponto anterior que excedam algum limite de distância irrealista.
fonte