Tengo tres series (o tablas) de puntos en PostGIS que quiero comparar. Me gustaría saber qué tan «cerca» está cada serie en comparación con las otras dos. En otras palabras, necesitaría alguna medida como el promedio de la distancia promedio de cada punto con todos los demás (es decir, el promedio de la matriz de distancia) … Suena complicado, pero estoy seguro de que existen algunas estadísticas comunes para comparar serie de puntos.
¿Cómo se vería mi consulta?
Comentarios
- Si selecciona como medida la distancia cuadrática media entre los puntos, la complejidad del cálculo se reduce de O (N ^ 2) a O (N), porque la distancia RMSE es igual a sqrt (2N / (N-1)) multiplicada por la distancia RMSE entre los N puntos y su centroide.
- Si lo haces a tu manera ' terminarás en una situación en la que comparar un conjunto consigo mismo terminará con una distancia distinta de cero. Es decir, comparará qué tan cerca están los puntos del conjunto no solo entre dos conjuntos.
- @Jakub Una forma común y eficaz de medir el grado de agrupación dentro de un conjunto de puntos que se ha dividido en " clusters " es utilizar alguna medida de distancia promedio dentro de cualquier conjunto de puntos. La comparación de la medida de todo el conjunto con la suma (o alguna otra combinación apropiada) de las medidas de los conglomerados evalúa la cantidad de conglomerados. Por lo tanto, su comentario, que algunos podrían leer como una objeción al procedimiento de Francesco ', en realidad señala por qué es interesante y útil.
- I No sé cuál es el punto de estos cálculos, pero si solo desea saber si los puntos del conjunto A están más cerca entre sí, entonces los puntos del conjunto B tal vez la solución sea contar el área de su casco (ST_Area + ST_ConcaveHull )
- ¿Hay alguna razón por la que desea obtener el promedio del promedio de TODAS las distancias entre puntos? Cada cálculo promedio se verá distorsionado por la distancia máxima entre entidades, cuando todos los conjuntos de entidades pueden estar bastante juntos.
Respuesta
Como mencioné en un comentario, la distancia promedio se verá distorsionada por las mayores distancias entre puntos. Por ejemplo, podría tener una nube de puntos de 100 km de ancho, que luego desplazaría lateralmente 1 m para formar una nueva tabla. La distancia promedio de cualquier punto de la tabla A a la tabla B estará más cerca de 100 km que de 1 m. La distancia más cercana para cualquier punto de la tabla A a la tabla B será de 1 m, y la la distancia más cercana promedio será de 1 m.
Aparte de eso, mostraré cómo calcular el promedio de la distancia más cercana, que luego puede extender como desee.
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
Y luego para calcular la distancia promedio más cercana:
SELECT avg(distance) FROM a_b_distances
Comentarios
- ¡Esto es genial! ¿Cómo podría extenderse esto para encontrar la distancia máxima más cercana?
- Cambiar
avg
paramax
- ¡Genial! ¿Podría ser esto? escrito para volver a devolver el máximo directamente? Yo ' estoy haciendo esto en todas mis líneas
- En este punto, es posible que desee hacer su propia pregunta y yo ' Estaremos encantados de intentar responderla, ' l Obtengo mejores detalles que esto de ida y vuelta en la sección de comentarios
- Agregado aquí (también editado) gis.stackexchange.com/questions/190237/…