Como calcular a distância média entre conjuntos de pontos como medida de proximidade

Tenho três séries (ou tabelas) de pontos no PostGIS que desejo comparar. Gostaria de saber o quão “perto” cada série é quando comparada com as outras duas. Em outras palavras, eu precisaria de alguma medida, como a média da distância média de cada ponto com todos os outros (ou seja, a média da matriz de distância) … Parece complicado, mas tenho certeza de que existem algumas estatísticas comuns para comparar série de pontos.

Qual seria a aparência da minha consulta?

Comentários

  • Se você selecionar como medida a raiz da distância quadrada média entre os pontos então a complexidade do cálculo reduz de O (N ^ 2) para O (N), porque a distância RMSE é igual a sqrt (2N / (N-1)) vezes a distância RMSE entre os pontos N e seus centróides.
  • Se você fizer do seu jeito, ' terminará em uma situação em que comparar um conjunto com ele mesmo resultará em uma distância diferente de zero. Ou seja, você vai comparar a proximidade dos pontos no conjunto não apenas entre dois conjuntos.
  • @Jakub Uma maneira comum e eficaz de medir o grau de agrupamento dentro de um conjunto de pontos que foi particionado em " clusters " é usar alguma medida de distância média dentro de qualquer conjunto de pontos. Comparar a medida de todo o conjunto com a soma (ou alguma outra combinação apropriada) das medidas dos clusters avalia a quantidade de cluster. Portanto, seu comentário, que pode ser lido por alguns como uma objeção ao procedimento de Francesco ', na verdade mostra por que é interessante e útil.
  • I não sei qual é o ponto desses cálculos, mas se você só quer saber se os pontos do conjunto A estão ou não mais próximos uns dos outros então os pontos do conjunto B talvez a solução seja contar a área de seu casco (ST_Area + ST_ConcaveHull )
  • Existe uma razão para você querer a média da média de TODAS as distâncias entre pontos? Cada cálculo médio será distorcido pela distância máxima entre os recursos, quando todos os conjuntos de recursos podem estar bem próximos.

Resposta

Como mencionei em um comentário, a distância média será distorcida pelas maiores distâncias entre os pontos. Por exemplo, você pode ter uma nuvem de pontos com 100 km de diâmetro, que você então desloca lateralmente em 1 m para formar uma nova mesa. A distância média para qualquer ponto da tabela A à tabela B será mais perto de 100 km do que 1 m. A distância mais próxima para qualquer ponto da tabela A à tabela B será de 1 m, e a a distância média mais próxima será de 1 m.

Deixando isso de lado, mostrarei como calcular a média da distância mais próxima, que você pode estender como quiser.

SELECT DISTINCT ON(a.id) a.id AS a_id, b.id AS b_id, ST_DISTANCE(a.geom, b.geom) as distance INTO a_b_distances FROM a, b ORDER BY a.id, a.geom <-> b.geom 

E então para calcular a distância média mais próxima:

SELECT avg(distance) FROM a_b_distances 

Comentários

  • Isso é ótimo! Como isso poderia ser estendido para encontrar a distância máxima mais próxima?
  • Troque avg para max
  • Incrível! Pode ser escrito para retornar para retornar o máximo diretamente? Eu ' estou fazendo isso em todas as minhas linhas
  • Neste ponto, você pode querer fazer sua própria pergunta e eu ' Ficarei feliz em tentar respondê-la, nós ' l Eu obtenho melhores detalhes do que estes na seção de comentários
  • Adicionado aqui (também editado) gis.stackexchange.com/questions/190237/…

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *