Saltar al contenido

Calcule la distancia mínima entre puntos en PostGIS

Basta ya de buscar por todo internet ya que llegaste al lugar correcto, poseemos la solución que quieres recibir y sin complicaciones.

Solución:

No es un problema simple, implica algún tipo de iteración forzada sobre el conjunto de puntos candidatos. Este capítulo del taller muestra un problema similar, pero no exacto (su problema es un poco más fácil)

http://postgis.net/workshops/postgis-intro/advanced_geometry_construction.html

El capítulo de búsqueda del vecino más cercano del taller muestra las herramientas que puede usar para realizar un enfoque asistido por índice con algún bucle externo que dirija la consulta.

http://postgis.net/workshops/postgis-intro/knn.html

Si sus puntos tienen una identificación distinta y conoce una tolerancia de distancia (9999), todos caerán dentro, una autounión y el uso del filtro “DISTINCT ON” le darán la respuesta de una sola vez.

WITH unfiltered AS
(
  SELECT t1.id AS id1, t2.id AS id2, ST_Distance(t1.geom, t2.geom) as dist
  FROM t t1, t t2 WHERE ST_DWithin(t1.geom, t2.geom, 9999) AND t1.id <> t2.id
  ORDER BY t1.id, ST_Distance(t1.geom, t2.geom) ASC
)
SELECT DISTINCT ON (id1) id1, id2, dist FROM unfiltered;

Primero reúne las combinaciones de puntos candidatas y las ordena por distancia. Luego, el filtro “distinto en” elimina solo el primer miembro de cada grupo de candidatos, que convenientemente es el más cercano, gracias a la clasificación previa.

¿Algo como eso? Ser advertido, no probado.

UPDATE my_table t1
SET dist = (SELECT ST_Distance(t1.geom, t2.geom) FROM my_table t2 WHERE t2.gid <> t1.gid ORDER BY ST_Distance(t1.geom, t2.geom) LIMIT 1)

Eres capaz de añadir valor a nuestro contenido contribuyendo tu experiencia en los informes.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *