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