0
我在Postgis中有很多行(在Geoserver中導入)。我需要爲每條固定長度(1公里,100米)的線創建(在新表中)多邊形(或緩衝區中具有固定顏色的緩衝區中的計數點的緩衝區)。我如何創建與查詢Postgis或可能與傳單(geojson從geoserver)?如何在Postgis查詢或傳單(geojson)上沿着具有固定長度的線創建多邊形?
我在Postgis中有很多行(在Geoserver中導入)。我需要爲每條固定長度(1公里,100米)的線創建(在新表中)多邊形(或緩衝區中具有固定顏色的緩衝區中的計數點的緩衝區)。我如何創建與查詢Postgis或可能與傳單(geojson從geoserver)?如何在Postgis查詢或傳單(geojson)上沿着具有固定長度的線創建多邊形?
砍你不得不使用ST_LINE_Substring
SELECT id,ST_Line_Substring(line,
CASE WHEN i=0 THEN 0 ELSE (i*100)/ST_Length(line) END,
CASE WHEN (i+1)*100<ST_Length(line) THEN ((i+1)*100)/ST_Length(line) ELSE 1 END),50,'endcap=flat')
FROM line,
(SELECT generate_series(0,floor(ST_Length(line)/100)::int) as i FROM line) as q
獲取ST_Buffer
出來很容易,如果你想讓它收平於兩端,如果你想比平放在其他的東西就變得更爲複雜的路線原始行的結尾。接着我們來ST_DIFFERENCE
然後用一個/上一個元素的緩衝區緩存,而不是忘記情況下,當只有一個片段
WITH
line_frags AS
(
SELECT l.id,i, ST_Line_Substring(l.line,
CASE WHEN i=0 THEN 0 ELSE (i*100)/ST_Length(l.line) END,
CASE WHEN (i+1)*100<ST_Length(l.line) THEN ((i+1)*100)/ST_Length(l.line) ELSE 1 END) as frag,
CASE WHEN (i+1)*100>ST_Length(l.line) THEN true ELSE false END as the_end
FROM line AS l JOIN (SELECT id,generate_series(0,floor(ST_Length(l.line)/100)::int) as i FROM line AS l) as q ON q.id=l.id)
SELECT
CASE
WHEN f1.i=0 AND f2.i IS NULL
THEN ST_Buffer(f1.frag,50,'endcap=round')
WHEN f2.i IS NOT NULL
THEN ST_DIFFERENCE(ST_Buffer(f1.frag,50,'endcap=round'),ST_BUFFER(f2.frag,50,'endcap=flat'))
ELSE
ST_Buffer(f1.frag,50,'endcap=flat') END as buf
FROM line_frags AS f1
LEFT JOIN line_frags AS f2
ON f1.id=f2.id AND (f1.i=0 and f2.i=1 OR f1.the_end AND f2.i=f1.i-1);
你能否提供更多的解釋應該怎麼樣子?也許是一個樣機圖像? – 2013-04-04 12:51:25
好吧,現在我有多邊形(從線緩衝區),我需要拆分這個多邊形與固定長度(多邊形-10公里,我需要10公里多邊形10)。 – user15445 2013-04-04 13:36:54
或可能被剪切線然後創建多邊形...? – user15445 2013-04-04 13:57:17