1

我有一个带有 gps-observations 的 postgis 数据库(postgres 8.4.11,postgis 1.5.2),我想在其中计算一些旅行距离。

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

(当然还有更多,但这是其中的距离部分)我已将其定义为视图,以便我可以轻松地执行 select * from motion_view whereobservedid=42

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

例如 select * form motion_view whereobservedid=42 and interval='15 minutes' ?

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

表定义:id integer、
gpsstatus character(2)、
datetime timestamp without time zone、
lat numeric(9,6)、
lon numeric(9,6)、
alt numeric(9,4)、
time integer、
datafileid integer、
shape geometry ,
speed 双精度,
dist 双精度,
shape_utm 几何,
lokalitet character(128),
covid integer

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

4

1 回答 1

3

问题一:

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
于 2012-05-23T09:59:24.840 回答