我如何计算有多少个缓冲区相交,并只选择那些与其他缓冲区有between 2 AND 6
相交的缓冲区?我可以用下面的查询创建一个缓冲区,但是我不知道如何计算交叉点
SELECT ST_Buffer(geom::geography, 400)
FROM mytable;
我很感谢你的帮助。谢谢。
发布于 2020-06-22 17:23:44
在这种情况下使用缓冲区是错误的,因为缓冲区只是一个近似值。相反,请使用索引兼容的st_dwithin()
函数。
这个想法是选择距离在两倍内的所有点(多边形或其他),对结果进行分组,并保留至少具有6个附近特征的点。
下面的示例使用了两个表,但您可以使用同一个表两次。
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, count(*), 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;
https://stackoverflow.com/questions/62519658
复制相似问题