Eu tenho um banco de dados de pontos de GPS. Não há faixas, apenas pontos. Preciso calcular algum valor para cada 100 metros, mas às vezes o GPS deu coordenadas erradas que estão longe dos pontos reais do GPS e, em vez de calcular valores para um pequeno quadrado, preciso calculá-lo para uma área retangular realmente grande.
Qual é o melhor algoritmo para filtrar pontos GPS errados?
Fiz uma captura de tela para ajudar a entender:
Respostas:
Execute o I de Anselin Local Moran contra os pontos e jogue fora qualquer coisa com um z-score abaixo de -1,96. Esse é um método estatístico para localizar outliers espaciais. Você deve garantir que todos os pontos tenham um valor relacionado à sua posição espacial para fazer isso.
Mas, ao verificar as ferramentas na 10.1 após o comentário do whuber, percebo que, se você usa o ArcGIS 10.1, a ferramenta de análise de agrupamento está disponível, que é realmente o que você deseja fazer.
Eu acho que você gostaria de fazer uma análise de agrupamento com uma restrição espacial da Triangulação de Delaunay. O obstáculo aqui é que você precisa ter um número de grupos de particionamento igual ou maior que o número de grupos desconectados (se algum dos outliers forem vizinhos naturais um do outro). Caso contrário, os outliers sem vizinhos naturais não criarão nenhum grupo na análise de agrupamento.
Com base nisso, acho que a triangulação de Delauney pode ser a fonte de um algoritmo de filtro, mas ainda não tenho certeza.
Outra atualização: depois de cavar o Partition.py, o script que executa a ferramenta de análise de agrupamento, acho que é possível usar o algoritmo lá para grupos desconectados combinados com a parte NoNeighbors, embora esteja tendo problemas para cavar essa parte do roteiro.
fonte
Isso pode ajudar a obter uma lista dos outliers:
Aqui, point_id seria a chave primária na sua tabela de pontos. A função de distância encontrará pontos onde o mais próximo é maior que 10.000 metros. (Você pode, é claro, colocar qualquer valor apropriado)
Se o procedimento acima funcionar, mude para uma instrução DELETE, algo como:
fonte
Tentarei fornecer uma resposta mais prática para ajudá-lo a fazer o trabalho. (desculpas se você estiver procurando por uma discussão sobre algoritmos)
Cenário 1: você menciona 'pontos GPS'; portanto, se você tiver acesso aos pontos de referência GPS originais, o trabalho se tornará muito mais fácil. Você pode eliminar pontos com alto HDOP / VDOP ou número de satélites em exibição - o que causaria o erro originalmente. Uma ferramenta gratuita como o gpsbabel possui esses filtros embutidos. http://www.gpsbabel.org/htmldoc-development/Data_Filters.html
Cenário 2: Você simplesmente tem um conjunto de pontos. O problema passa a ser a detecção de outliers espaciais. Há muita pesquisa nessa área e vejo muitos artigos sobre esse assunto em uma pesquisa na web. Se você deseja limpar seus dados, pode usar o algoritmo v.outlier do GRASS, que deve funcionar no seu caso com base na captura de tela que você compartilhou. http://grass.osgeo.org/gdp/html_grass63/v.outlier.html
fonte
Eu acho que você tem dados indesejados. Realisticamente, se você se importa com o fato de alguns dados estarem errados e não pode identificar com segurança todos os pontos errados usando outro fator, terá alguns dados ruins em sua análise.
Se isso importa, provavelmente você deve jogar tudo, descobrir a causa raiz (por exemplo, os pontos ruins do GPS são de vários caminhos), abordar a causa raiz (por exemplo, adicionar uma antena de estrangulamento ou um tipo melhor de GPS ou qualquer outra solução) é) e refazendo a coleta de dados.
Se os dados incorretos não importarem, use-os e ignore os erros.
fonte