如何使用 PostGIS 缓冲点层并查找点是否落在这些缓冲区内,忽略每个缓冲区自己的中心点

How to use PostGIS to buffer a point layer and find if points fall within these buffers, ignoring each buffer's own central point

我有一个 table 包含点几何图形和一个 buffer_distance 列。我想使用 buffer_distance 列在每个点周围创建一个缓冲区,并检查每个缓冲区内是否有任何点,但要确保忽略每个缓冲区多边形中心的点(我创建缓冲区的点) .

我有以下查询,但它 returns 对于 point_within 列中的所有值都是正确的,因为它没有忽略缓冲几何中心的点。

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 p

您正在寻找的是空间连接。将 table 与其自身连接起来,检查每个缓冲区中有哪些记录,然后排除重复项:

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;

演示:db<>fiddle