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

PostgreSQL/PostGIS:以编程方式生成缓冲区,直到返回两行,sql,postgresql,postgis,Sql,Postgresql,Postgis,我的PostgreSQL 9.6数据库中有两个表,即line和building,其中包含几何列。以下查询在给定距离内为true时,返回街道周围缓冲区与建筑几何体的交点 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) 线路两侧分别有两个建筑多边形,分别为

我的PostgreSQL 9.6数据库中有两个表,即line和building,其中包含几何列。以下查询在给定距离内为true时,返回街道周围缓冲区与建筑几何体的交点

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。 在查询编辑器中有两个选项创建函数或执行$$

这是第二个

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,$1),a.geom) 
    and a.fid not in (select fid from t)
    and y.geom&&a.geom' using i;
    END LOOP;
END;
$$
a、 fid不在从t->控制行选择fid 对于1..15中的i,这里迭代最多15次 y、 geom&&a.geom加速结果 最后

select * from t

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

好的,非常感谢你的帮助。我的目标是计算从线路到两侧建筑物的距离之和。建筑物可能位于相同或不相等的距离上,例如,左侧的建筑物可能比右侧的建筑物更近,因此我选择了这种方法来生成缓冲区和增量缓冲区,直到选择了线两侧的建筑物。