Tengo una tabla que contiene geometrías de puntos y una columna buffer_distance. Quiero crear un búfer alrededor de cada punto usando la columna buffer_distance y verificar si algún punto está dentro de cada búfer pero asegurándome de ignorar el punto en el centro de cada polígono del búfer (el punto desde el cual creé el búfer).
Tengo la siguiente consulta, pero devuelve True para todos los valores en la columna point_within, ya que no ignora el punto en el centro de la geometría del búfer.
SELECT p.id, ST_Buffer(p.geom, p.buffer_distance), ST_Within(p.geom, ST_Buffer(p.geom, p.buffer_distance)) AS point_within FROM point_table as pLo que estás buscando es una unión espacial. Únase a la tabla consigo misma y verifique qué registros se encuentran dentro de cada búfer individual y luego excluya los duplicados:
SELECT * FROM point_table p JOIN point_table p2 ON ST_Contains(ST_Buffer(p.geom, p.buffer_distance), p2.geom) AND p2.id <> p.id; Demostración: db<>fiddle