2013-01-04 45 views
3

我有一個點層和一個線路層。這些點是使用DGPS收集的道路交匯點,而線路是連接道路,通過手持GPS以跟蹤模式收集。因此,這些線實際上並沒有連接到這些點上。如何將線串開始和結束頂點對齊到最近點?

Sample Network Image

現在我想:

  1. 從各行字符串中刪除所有的中間節點,使之成爲一條直線。

  2. 將起始點&的末端頂點對齊到最近的點。

我使用了PostGIS 2.0.This迄今爲止我做了什麼:

UPDATE line 
SET geom = ST_Simplify(geom, 1000); 

問:有沒有其他更好的方式來完成它(因爲我使用的是荒謬的公差)

UPDATE line 
SET geom = ST_AddPoint(
(SELECT geom FROM line WHERE id = 1), 
(SELECT p.geom FROM point AS p, line AS l 
    ORDER BY ST_Distance(p.geom,(SELECT ST_StartPoint(l.geom) FROM lt WHERE l.id=1)) LIMIT 1), 
0) 
WHERE id=1; 

這會將行(id = 1)擴展到最近的點(在行的開頭添加的點)。

問:上面看起來有點複雜,有沒有其他有效的方法/功能可用?

回答

3

這似乎是合理的做同樣的查詢(未測試)兩個操作:

UPDATE line l 
SET geom = ST_MakeLine(
    (SELECT geom FROM point p ORDER BY ST_Distance(p.geom, ST_StartPoint(l.geom) LIMIT 1), 
    (SELECT geom FROM point p ORDER BY ST_Distance(p.geom, ST_EndPoint(l.geom) LIMIT 1) 
); 

如果數據集是小,你只運行一次查詢,性能不是問題 - 但你可以添加額外的bbox比較以加快速度:

SELECT geom FROM point p WHERE p.geom && ST_Expand(ST_StartPoint(l.geom), 100) ORDER BY ST_Distance(p.geom, ST_StartPoint(l.geom) LIMIT 1 
相關問題