PostgreSQL/PostGIS:以编程方式生成缓冲区,直到返回两行

PostgreSQL/PostGIS: Programmatically generate buffer until two rows are returned

我的 PostgreSQL 9.6 数据库中有两个表,即包含几何列的线和建筑物。以下查询 returns 街道和建筑物几何图形周围缓冲区的交集(在给定距离内为真)。

Select
building.geom as bu_geom
From
line
left join building on
/* start by 1 meter buffer*/
st_intersects(ST_Buffer(line.geom, 1), building.geom)

线两侧分别在11米和15米处有两个建筑物多边形。我需要修改上面的查询,以便缓冲区应该从 1 米开始并继续增加,直到返回两行(两个建筑物)和缓冲区距离。有人可以建议我怎么做吗?

您需要迭代来增加缓冲距离,因此必须使用 plpgsql。 查询编辑器中有两个选项 Create FuntionDO $$

这是第二个;

do  LANGUAGE plpgsql
$$ 

begin
 EXECUTE 'drop table if exists t';
 EXECUTE 'create temporary table t ( fid int, geom geometry)';
 FOR i in 1..15
    LOOP
    EXECUTE 'insert into t (fid,geom)  select a.objectid,a.geom
    from line y, building a 
    where st_intersects(st_buffer(y.geom,),a.geom) 
    and a.fid not in (select fid from t)
    and y.geom&&a.geom' using i;
    END LOOP;
END;
$$
  • a.fid 不在 (select fid from t) --> 控制线
  • FOR i in 1..15 iteration is here up to 15
  • y.geom&&a.geom 加速结果

终于;

select * from t

这个解决方案很慢,如果你解释你的真正目的,更好的查询应该写。