查询以查找空闲时间,即GPS长时间显示相同的坐标15分钟

问题描述 投票:1回答:1

我在postgres中的GPS表的模式具有四个字段,分别是用户ID(int),纬度(float8),经度(float8),记录时间(时间戳)。对于每个用户,我们每分钟获得2条记录。

需要查询以在相同的GPS纬度长值上花费超过15分钟的用户吗?

样本记录可能是

Userid, Latitiude, Longitude, recordedtime 
============================================
'ID1',12.089475408,76.089890,2019-11-24 19:10:01
'ID1',12.089475408,76.089890,2019-11-24 19:10:31
'ID1',12.089475408,76.089890,2019-11-24 19:11:01
'ID1',12.089475408,76.089890,2019-11-24 19:10:31
'ID1',12.089475408,76.089890,2019-11-24 19:12:01
'ID1',12.089475408,76.089890,2019-11-24 19:10:31
....

..

任何人都可以提供所需的查询吗?

sql postgresql gps postgis latitude-longitude
1个回答
1
投票

CTE可能就是您想要的。

CTE

您是否考虑过使用WITH j AS ( SELECT userid,longitude,latitude, max(recordedtime)-min(recordedtime) AS timespent FROM t GROUP BY userid,longitude,latitude ) SELECT * FROM j WHERE timespent > interval '15 minute'; userid | longitude | latitude | timespent --------+-----------+-----------+----------- ID1 | 80.205480 | 13.082240 | 00:20:00 (1 Zeile) 处理您的观点?您的用例看起来很简单,但是很快您可能会发现自己难以在已在PostGIS中解决的数据模型中执行地理空间操作。

如果您有兴趣,这是根据GPS坐标创建几何列的方法:

PostGIS
PostGIS功能中的

4326代表参考系统WGS84。检查哪一个适合您的坐标。

这就是查询的样子:

ALTER TABLE t ADD COLUMN geom GEOMETRY;
UPDATE t SET geom = ST_SetSRID(ST_MakePoint(longitude, latitude),4326);

Note:如@JGH所述,此用例假定坐标为identical,以便计算花费的时间。您的坐标有六个小数位,这使您的精度为ST_SetSRID。长话短说,如果坐标偏离几米,它将不起作用。请记住;)

© www.soinside.com 2019 - 2024. All rights reserved.