2012-05-15 28 views
1

我有一個postgis數據庫(postgis 8.4.11,postgis 1.5.2)和gps-observations我想計算一些旅行距離。在postgis中沿點查找路徑長度

我從gpspoint P1,P2 gpspoint計算到另一個小時後用 選擇observedid,ST_Distance(p1.shape_utm,p2.shape_utm)從一個點行進距離,其中p2.datetime = p1.datetime +間隔「1小時」

(當然多一點,但這是距離部分在它)我已經定義這是一個視圖,這樣我可以很容易地做一 SELECT * FROM movement_view其中observedid = 42

問題1: 是否可以製作視圖以便我可以定義時間間隔?

例如select * form movement_view where observedid = 42 and interval = '15 minutes'?

問題2: SQL/postgis中可能計算一段時間內的總行程距離嗎?我每5秒鐘都有一個gps點,並且想要計算例如每個gps點後1小時。我可以使用與上面相同的方法計算每個點的行進距離,然後我可以使用sum()函數,但是如何?

表定義: ID整數,
gpsstatus字符(2),
日期時間時間戳沒有時區,
LAT數字(9,6),
LON數字(9,6),
中高音數字(9,4),
時間整數,
datafileid整數,
形狀的幾何形狀,
速度雙精度,
DIST雙PREC ision,
shape_utm幾何形狀,
lokalitet字符(128),
cowid整數

編號:主鍵上有形狀和shape_utm有關日期時間,lokalitet,cowid,gpsstatus,要旨索引的索引。

+0

對不起,稍微wron標題,一個更好的將是「找到路徑沿點postgis路徑的長度」 – MortenSickel

+0

銖,試圖刪除評論後,我發現我可以編輯標題,但爲時已晚...... – MortenSickel

+0

答案是肯定的兩個,它創建一個具有關鍵點的子查詢相對容易,每個點集合在兩點之間的距離,然後求和這些結果。我添加了一個postgresql標籤,因爲你的答案是更多的SQL,然後它是地理位置...更多的意見這種方式。如果你提供表格模式信息,你可能會得到一個工作答案。 – Twelfth

回答

3

問題1:

CREATE VIEW movement_view AS 
SELECT observedid, ST_Distance(p1.shape_utm,p2.shape_utm) as distance, p1.datetime as datetime1, p2.datetime as datetime2 
FROM gpspoint p1, gpspoint p2; 

SELECT * from movement_view where observedid = 42 and datetime2 = datetime1 + interval '15 minutes' 

問題2:

創建從點線,並計算長度:

SELECT hours, st_Length(ST_MakeLine(t.shape_utm)) as distance FROM 
    (SELECT date_trunc('hour', datetime::timestamp) as hours, shape_utm FROM gpspoint order by datetime) as t 
GROUP by hours 
+0

謝謝@ user1410317,顯然沒有按照正確的觀點來思考。必須多看一點其他答案 – MortenSickel

+0

請注意,我犯了一個錯誤。在第二個問答中,它應該是ST_length,而不是st_distance。已經更正了它。 – Thomas