3 votos

PostGIS, punto más cercano a otro punto

Tengo dos mesas: punto1 y punto2 . Para cada punto de la tabla point1 Quiero encontrar el punto más cercano de la tabla point2 .

Por ejemplo: Para el punto con id=1 de la tabla point1 el punto más cercano de la tabla point2 tiene id (?? quiero conseguirlo id ).

Intenté usar ST_ClosestPoint pero no funcionó correctamente. Mi código:

SELECT ST_ClosestPoint(pont2.geom, (SELECT point1.geomxy WHERE point1.id=1))
FROM pint2, point1

2 votos

Has escrito mal "punto2" de dos formas distintas en el SQL proporcionado. ¿Qué mensaje de error recibió y por qué "no funcionaba correctamente"? Por favor, Editar la pregunta.

9voto

mathieu Puntos 53

Esto se denomina (espacial) (K)NN búsqueda; el enfoque más eficaz es un LATERAL subconsulta en conjunción con el índice impulsado <-> operador:

SELECT a.id,
       b.id,
       -- a.geom / b.geom
FROM   <points1> AS pt1
CROSS JOIN LATERAL (
  SELECT id
  FROM   <points2>
  ORDER BY
         geom <-> a.geom
  LIMIT  1
) AS b
;

Recomiendo a leer más sobre múltiples temas relacionados con (K)NN consultas, para entender LATERAL consultas, distancias y uso de índices .

Relacionado con esto:

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X