PostGIS/CartoDB:在多行线中存储每个点的时间戳

PostGIS/CartoDB:在多行线中存储每个点的时间戳,gis,postgis,Gis,Postgis,我正在使用作为我的应用程序的PostGIS服务器 我需要存储轨迹,并为每个轨迹点的坐标对关联一个时间戳,以便进行类似的查询,为我提供第X天上午12点到下午12点之间行驶的距离 在CartoDB中,我只能创建3种类型的表:多点、多线和多多边形。要插入曲目,我使用的是多行列表 我的第一个尝试是插入时间戳作为多重约束中每个点的Z索引,但是我总是得到一个错误:几何体有Z维度,但列没有。 如何在“普通”PostGIS数据库中实现这一点,以及如何在CartoDB PostGIS实现中实现这一点 更新1: 所

我正在使用作为我的应用程序的PostGIS服务器

我需要存储轨迹,并为每个轨迹点的坐标对关联一个时间戳,以便进行类似
的查询,为我提供第X天上午12点到下午12点之间行驶的距离

在CartoDB中,我只能创建3种类型的表:多点、多线和多多边形。要插入曲目,我使用的是多行列表

我的第一个尝试是插入时间戳作为多重约束中每个点的Z索引,但是我总是得到一个
错误:几何体有Z维度,但列没有。

如何在“普通”PostGIS数据库中实现这一点,以及如何在CartoDB PostGIS实现中实现这一点

更新1: 所以在jatorre回答之后,我创建了一个例子作为练习。 然而,我得到了不连贯的结果

在上面的示例中,我有两个具有相同两个数据集的表。但是,一个是
多行
表,其中每一行表示一个
,另一个是
多点
表,我在其中存储每个
坐标集

然后我查询这两个表,根据传输模式得到段的总距离。我想我很清楚地了解了jattore的想法,但是我不明白为什么我对
汽车
步行
总距离得出了不同的结果。有什么提示吗

解决方案: 距离上的微小差异是因为在对
段进行分组之前,我需要对
表进行排序。 这是我当前的查询,用于根据运输模式获取总行程和行驶时间:

WITH segments AS 
  (SELECT ST_Makeline(pts.the_geom_webmercator) as the_geom, (MAX(pts.timestamp) - MIN(pts.timestamp)) AS time, paths.transport_mode, paths.cartodb_id AS id
   FROM (SELECT * FROM points ORDER BY track_id, path_id, timestamp ASC) AS pts JOIN paths ON pts.path_id=paths.cartodb_id
   WHERE paths.user_id=1
   GROUP BY id, transport_mode)
SELECT SUM(ST_Length(segments.the_geom)) AS distance, SUM(segments.time), segments.transport_mode
FROM segments
GROUP BY segments.transport_mode
ORDER BY distance

嗯,这要看情况而定

假设你有一个GPS轨迹的结构。在本例中,您将把这些GPS轨迹转换为段,即仅包含两个坐标的直线,并且可以将“开始时间”和“结束时间”列分开

然后,使用该结构,您可以在这些日期之间使用WHERE子句进行选择,并对分段的ST_Length_球体求和

如果要在一个查询中完成所有操作,请考虑到您有一个包含以下内容的表:

the_geom(point), timestamp, cartodb_id
你可以这样做

WITH segments AS 
(SELECT ST_MakeLine(
   the_geom,
   (SELECT the_geom FROM tracks as st WHERE st.cartodb_id = t.cartodb_id+1)
) as the_geom
FROM traces as t WHERE timestamp BETWEEN ...)
SELECT sum(ST_Length_Spheroid(segments.the_geom)
这完全是我们的想法。。。但我希望你能明白


你不需要使用Z维,事实上我们并不支持它。

这很有道理。我已经更新了我的问题,你能提供一些反馈吗?谢谢