在postgis中找到沿着点的路径长度

时间:2012-05-15 18:31:32

标签: postgresql postgis

我有一个postgis数据库(postgres 8.4.11,postgis 1.5.2)和gps-observation,我想计算一些旅行距离。

我计算一小时后从一个点到另一个点的行进距离 从gpspoint p1,gpspoint p2中选择observeid,ST_Distance(p1.shape_utm,p2.shape_utm),其中p2.datetime = p1.datetime + interval'1小时'

(当然还有一点,但这是它中的距离部分)我把它定义为一个视图,这样我就可以轻松做到 select * from movement_view where observedid = 42

问题1: 是否可以制作视图以便我也可以定义时间间隔?

e.g。 select * form movement_view where observeid = 42 and interval = '15 minutes'?

问题2: 在SQL / postgis中可以计算一段时间内的总行进距离吗?我每隔5秒就有一个gpspoint,并且想要计算行进距离,例如每个gps点后1小时。我可以使用与上面相同的方法计算每个点的行进距离,然后我可以使用sum()函数,但是如何?

表定义: id整数,
gpsstatus字符(2),
没有时区的日期时间戳,
lat数字(9,6),
离数字(9,6),
alt numeric(9,4),
时间整数,
datafileid整数,
形状几何,
速度双倍精度,
dist double precision,
shape_utm geometry,
lokalitet字符(128),
女儿整数

Id:主键在datetime,lokalitet,cowid,gpsstatus,gist-index on shape和shape_utm上有索引。

1 个答案:

答案 0 :(得分: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
相关问题