PostgreSQL/PostGIS:以编程方式生成缓冲区,直到返回两行
我的PostgreSQL 9.6数据库中有两个表,即line和building,其中包含几何列。以下查询在给定距离内为true时,返回街道周围缓冲区与建筑几何体的交点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) 线路两侧分别有两个建筑多边形,分别为
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
这个解决方案非常慢,如果你解释你的真正目的,更好的查询应该会写出来。好的,非常感谢你的帮助。我的目标是计算从线路到两侧建筑物的距离之和。建筑物可能位于相同或不相等的距离上,例如,左侧的建筑物可能比右侧的建筑物更近,因此我选择了这种方法来生成缓冲区和增量缓冲区,直到选择了线两侧的建筑物。