2017-06-21 186 views
0

我的PostgreSQL 9.6数据库中有两个表,即包含几何列的行和建筑物。以下查询返回街道周围的缓冲区与建筑物几何图形的交点(当给定距离为真时)。PostgreSQL/PostGIS:以编程方式生成缓冲区,直到返回两行

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米开始并继续增加,直到返回两行(两个建筑物)和缓冲距离。有人可以建议我怎么做?

回答

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,$1),a.geom) 
    and a.fid not in (select fid from t) 
    and y.geom&&a.geom' using i; 
    END LOOP; 
END; 
$$ 
  • a.fid未在(选择从吨FID) - >控制线
  • FOR i的1..15迭代这里最多15
  • y.geom & &一个.geom加速结果

最后;

select * from t 

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

+0

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