Jai trois séries (ou tables) de points dans PostGIS que je veux comparer. Je voudrais savoir à quel point chaque série est « proche » par rapport aux deux autres. En dautres termes, jaurais besoin dune mesure telle que la moyenne de la distance moyenne de chaque point avec tous les autres (cest-à-dire la moyenne de la matrice de distance) … Cela semble compliqué, mais je suis sûr quil existe une statistique commune pour comparer série de points.
À quoi ressemblerait ma requête?
Commentaires
- Si vous sélectionnez comme mesure la distance quadratique moyenne entre les points alors la complexité du calcul diminue de O (N ^ 2) à O (N), car la distance RMSE est égale à sqrt (2N / (N-1)) fois la distance RMSE entre les N points et leur centroïde.
- Si vous le faites à votre façon, ' vous vous retrouverez dans une situation où comparer un ensemble à lui-même aboutira à une distance non nulle. Cest-à-dire que vous comparerez la proximité des points de lensemble non seulement entre deux ensembles.
- @Jakub Un moyen courant et efficace de mesurer le degré de regroupement dans un ensemble de points qui a été partitionné en " clusters " consiste à utiliser une mesure de distance moyenne dans nimporte quel ensemble de points. La comparaison de la mesure pour lensemble de lensemble à la somme (ou à une autre combinaison appropriée) des mesures des grappes évalue le degré de regroupement. Ainsi, votre commentaire, qui pourrait être lu par certains comme une objection à la procédure de Francesco ', montre en fait pourquoi il est intéressant et utile.
- I Je ne sais pas à quoi servent ces calculs, mais si vous voulez seulement savoir si les points de lensemble A sont ou non plus proches les uns des autres, les points de lensemble B peut-être que la solution sera de compter laire de leur coque (ST_Area + ST_ConcaveHull )
- Y a-t-il une raison pour laquelle vous voulez la moyenne de la moyenne de TOUTES les distances entre les points? Chaque calcul moyen sera déformé par la distance maximale entre les entités, lorsque tous les ensembles dentités peuvent être assez proches les uns des autres.
Réponse
Comme je lai mentionné dans un commentaire, la distance moyenne sera déformée par les plus grandes distances entre les points. Par exemple, vous pouvez avoir un nuage de points de 100 km de diamètre, que vous décalez ensuite latéralement de 1 m pour former une nouvelle table. La distance moyenne pour tout point du tableau A au tableau B sera plus proche de 100 km que de 1 m. La distance la plus proche pour tout point du tableau A au tableau B sera de 1 m et distance moyenne la plus proche sera de 1 m.
Avec cela mis à part, je vais montrer comment calculer la moyenne de la distance la plus proche, que vous pouvez ensuite prolonger à votre guise.
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
Et puis pour calculer la distance moyenne la plus proche:
SELECT avg(distance) FROM a_b_distances
Commentaires
- Cest génial! Comment cela pourrait-il être étendu pour trouver la distance maximale la plus proche?
- Echanger
avg
pourmax
- Génial! Cela pourrait-il être écrit pour retourner pour renvoyer le max directement? Je ' je fais cela sur toutes mes lignes
- À ce stade, vous voudrez peut-être poser votre propre question et je ' serons heureux dessayer dy répondre, nous ' l Jobtiens de meilleurs détails que cela dans les deux sens dans la section commentaires
- Ajouté ici (également édité) gis.stackexchange.com/questions/190237/…