如何计算 PostGIS 中有多少个缓冲区相交
how to count how many buffers intersects in PostGIS
我如何计算有多少缓冲区相交并且 select 仅那些与其他缓冲区有 between 2 AND 6
相交的缓冲区?我可以使用以下查询创建缓冲区,但我不知道如何计算交叉点
SELECT ST_Buffer(geom::geography, 400)
FROM mytable;
感谢您的帮助。谢谢
在这种情况下使用缓冲区是错误的,因为缓冲区只是一个近似值。相反,使用索引兼容 st_dwithin()
函数。
想法是 select 所有点(多边形或其他)在距离的两倍以内,对结果进行分组并保持至少具有 6 个附近特征的点。
下面的示例使用了 2 个 table,但您可以使用相同的 table 两次。
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;
要使用相同的 table 两次,您可以为它们起别名:
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;
我如何计算有多少缓冲区相交并且 select 仅那些与其他缓冲区有 between 2 AND 6
相交的缓冲区?我可以使用以下查询创建缓冲区,但我不知道如何计算交叉点
SELECT ST_Buffer(geom::geography, 400)
FROM mytable;
感谢您的帮助。谢谢
在这种情况下使用缓冲区是错误的,因为缓冲区只是一个近似值。相反,使用索引兼容 st_dwithin()
函数。
想法是 select 所有点(多边形或其他)在距离的两倍以内,对结果进行分组并保持至少具有 6 个附近特征的点。
下面的示例使用了 2 个 table,但您可以使用相同的 table 两次。
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;
要使用相同的 table 两次,您可以为它们起别名:
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;