我從某處導入了〜1000個路徑到我的postgis數據庫到一個線串字段。Postgis重新排列混合線串塊/ max_segment_length(線串)?
(編輯)我的表是這樣的
+---------+---------------+------------------+
| id(int) | name(varchar) | path(LINESTRING) |
+---------+---------------+------------------+
| 123 | foo | 000002... |
| 124 | bar | 000002... |
我有這樣的每個路徑被分成塊的問題,而這些塊在某些情況下進行混合。
假設在點數目50和70劃分線串:
- 堆塊A:點1-50
- 組塊B:點51-70
- 組塊C:點71-100
當我遷移的到我的數據庫,他們搞混,所以導致線串最終可能是這樣的:
- 堆塊A:點1-50
- 組塊C:點71-100
- 組塊B:點51-70
所以產生50至71的跳躍,並從100另一51
(編輯)當我進口的那些塊我認爲他們被要求分成的路徑,但事實是,有的被混了,這讓我的一些線串的是與自己的積分排序,如第二個例子。我想要能夠重新排列這些塊(點),所以我想構建一個SQL查詢來檢測哪些路徑有混合點,然後我可以手動(使用一個使用openlayers的工具)重新排列它們。
,希望有一個SQL更新查詢來解決這個問題,但我認爲,檢測更容易(我相信也有有錯誤的路徑〜5%或更少)
EDIT3:我認爲用於檢測的腳本可以檢查路徑是否包含一對連續的點太遠。也許一個從包含最長段的路徑排序路徑的SQL會很好。
我該如何製作一個函數來獲取線段中最大段的長度?
在這裏,我展示一個例子: 這是它是如何在數據庫中
這是我希望它被固定
EDIT4:就像我計劃在EDIT3,可以使用ST_NPoints()和ST_PointN()來寫一個函數來查找線串中兩個連續點之間的最長距離,該線串通過線串的點迭代,然後可以查詢具有該最長距離的路徑。這種距離太長的線串很可能會導致所描述的問題。這樣我就能夠檢測到它們,並手動修復它們。
從檢測SQL的結果會是這樣的:
|ordered by this|
+---------+---------------+------------------+---------------+
| id(int) | name(varchar) | path(LINESTRING) | msbtcp(int) |
+---------+---------------+------------------+---------------+
| 123 | foo | 000002... | 1000 |
| 124 | bar | 000002... | 800 |
* msbtcp將是函數的結果:max_separation_between_two_consecutive_points(path)
'線幾何(LINESTRING)'拋出一個錯誤,所以我將它改爲'線幾何'。像檢測的魅力一樣工作。 – jperelli 2012-04-29 14:30:13
啊,我在用PostGIS-2.0;你必須在1.5? – 2012-04-30 02:30:52
這就對了我正在使用PostGIS 1.5 – jperelli 2012-05-01 16:16:28