stackoverflow。什麼是postgresql的查詢來解決這些相當複雜的步驟?
這可能會受到質疑,因爲它包含PostGIS函數,可根據我們擁有的舊數據計算每個資產的缺失數據(the_geom)。無論您是否瞭解PostGIS,都可以解決這個問題。
- (注)我確切地知道我從這個問題想的,但我不知道的步驟合併這一切在一個單一的查詢或PHP腳本。*
讓我解釋一下這個問題的一些細節。首先,想一想街上的自行車道(資產)。自行車道本身是線繩,位於一個或多個小街道(子控制部分)。
要想象這個問題,這些都是一些可能的結果。
==============|=============
x---------------------y
==============|======|==========
x-------------------------y
==============
x------y
注: 「=======」 是CID(每個子CTRL節), 「|」分開每個cid, 「-------」是aid(每個資產),「x」是km_start(起點),「y」是每個資產的km_end(結束點)。
資產(表) - 包含5個資產
aid | km_start | km_end | ctrl_sec_no | the_geom
1 | 10 | 15 | 1234 | null
2 | 10 | 25 | 1234 | null
3 | 13 | 15 | 5678 | null
4 | 11 | 15 | 5678 | null
5 | 13 | 17 | 5678 | null
中心線(表) - 包含5 子CTRL截面。
cid | km_start | km_end | ctrl_sec_no | the_geom(LINESTRING)
1 | 10 | 12 | 1234 | xxxx...
2 | 13 | 15 | 1234 | xxxx...
3 | 16 | 30 | 1234 | xxxx...
4 | 10 | 15 | 5678 | xxxx...
5 | 16 | 20 | 5678 | xxxx...
我想要的結果是一樣
aid(1) -> cid(1) + cid(2)
aid(2) -> cid(1) + cid(2) + cid(3)
aid(3) -> cid(4)
aid(4) -> cid(4)
aid(5) -> cid(4) + cid(5)
注: 「資產(1)(2)在CID項包含在中心線(1)和中心線」
然後,當我們從上面的步驟中獲得每個cid(中心線)後,我們想通過使用「ST_Line_Substring」找到每個援助(資產)的the_geom UPDATE找到每個cid的子字符串。
但是現在我們沒有資產(表)的the_geom,所以我們必須計算它!
例如(ctrl_sec_no:1234) - 這是不完美的規模,只是可視化
10======12======13======15======16======30
x-------|-------|-------y (aid:1)
x-------|-------|-------------------y (aid:2)
x-------y (aid:3)
例如(ctrl_sec_no:5678)
10=====15/16=====20
x-----y (aid:4)
x--|----y (aid:5)
這意味着我們必須計算通過使用ST_Line_Substring在每個子控制段中資產的比率。現在,我們將顯示此功能的工作原理:)
例如:(援助:5)2 子CTRL-部分佔據
SELECT ST_Line_Substring('the_geom',13-10/15-10,1.0) FROM centerline WHERE ctrl_sec_id = 4567 and cid = 4
SELECT ST_Line_Substring('the_geom',0.0,17-16/20-16) FROM centerline WHERE ctrl_sec_id = 4567 and cid = 5
(13-10)/(15-10 )= 3/5是(援助:5)在(cid:4)中佔用的資產的第一部分的比率 - a.km_start - c.km_start/c.km_end - c.km_start
(17-16)/(20-16)= 1/4是(aid:5)在(cid:5)中佔用資產的第二部分的比率 - a.km_start - c.km_start/c .km_end - c.km_start
然後我們需要從上面的查詢計算ST_Union的每個部分(從ST_Line_Substring返回的the_geom)。
問題是要完成所有這些步驟的查詢是什麼,必要時可以用PHP腳本完成。
我已更新問題的詳細信息,請檢查,謝謝你的合作:) – 2012-03-22 23:49:09