我如何计算有多少个缓冲区相交,并仅选择与其他缓冲区有between 2 AND 6
相交的缓冲区?我可以使用以下查询创建缓冲区,但是我不知道如何计算交叉点
SELECT ST_Buffer(geom::geography,400)
FROM mytable;
感谢您的帮助。谢谢。
我如何计算有多少个缓冲区相交,并仅选择与其他缓冲区有between 2 AND 6
相交的缓冲区?我可以使用以下查询创建缓冲区,但是我不知道如何计算交叉点
SELECT ST_Buffer(geom::geography,400)
FROM mytable;
感谢您的帮助。谢谢。
在这种情况下使用缓冲区是错误的,因为缓冲区只是一个近似值。而是使用与索引兼容的st_dwithin()
函数。
想法是选择距离在两倍以内的所有点(多边形或其他点),以对结果进行分组,并使那些至少具有6个附近要素的点保持不变。
下面的示例使用2个表,但是您可以使用同一张表两次。
SELECT myTable.ID,count(*),array_agg(myOtherTable.ID) as nearby_ids
FROM mytable
JOIN myOtherTable ON st_Dwithin(mytable.geom::geography,myOtherTable.geom::geography,800)
GROUP BY myTable.ID
HAVING count(*) >= 6;
要使用同一张表两次,可以给它们起别名:
SELECT a.ID,array_agg(b.ID) as nearby_ids
FROM mytable a
JOIN mytable b ON st_Dwithin(a.geom::geography,b.geom::geography,800)
GROUP BY a.ID
HAVING count(*) >= 6;