首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PostGIS/CartoDB:存储MultiLineString中每个点的时间戳

PostGIS/CartoDB:存储MultiLineString中每个点的时间戳
EN

Stack Overflow用户
提问于 2012-06-29 00:32:08
回答 1查看 1.3K关注 0票数 6

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

我需要存储轨迹并为每个跟踪点坐标对关联一个时间戳,以便进行类似于give me the distance traveled between 12AM and 12PM on day X的查询。

在CartoDB中我只能创建3种类型的表: MULTIPOINT,MULTILINESTRING和MULTIPOLYGON。为了插入曲目,我使用了MULTILINESTRING表。

我的第一个尝试是为多行中的每个点插入时间戳作为Z索引,但是我总是得到一个ERROR: Geometry has Z dimension but column does not.

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

更新1:

因此,在jatorre回答之后,我创建了一个JSFiddle示例作为练习。然而,我得到的结果并不一致。

在上面的示例中,我有两个表,其中包含两个相同的数据集。但是,一个是MULTILINESTRING表,其中的每一行表示一个segment,另一个是MULTIPOINT表,我在其中存储每一组segment坐标。

然后查询这两个表以获得total distance of segments according to transport mode。我想我很清楚地理解了jattore的想法,但是我不明白为什么CarWalk总距离会得到不同的结果。有什么提示吗?

解决方案:

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

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-29 06:49:31

嗯,这要看情况了。

想象一下你有一个GPS轨迹的结构。在本例中,您将把这些GPS轨迹转换为线段,即两个坐标线,您可以使用start_time和end_time分隔列。

然后,使用这种结构,您可以在这些日期之间使用WHERE子句执行SELECT操作,并对这些段的ST_Length_Spheroid求和。

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

代码语言:javascript
复制
the_geom(point), timestamp, cartodb_id

你可以做像这样的事情

代码语言:javascript
复制
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维度,实际上我们不是很好地支持它。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11249052

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档