2017-06-21 187 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

好的,非常感謝您的幫助。我的目標是計算線路到建築物兩側的距離總和。建築物可以在相同和不等的距離上,例如左側的建築物可能比右側的建築物更近,所以我選擇這種方法來生成緩衝區和增量緩衝區,直到選擇了建築物的兩側建築物。 –