gpt4 book ai didi

gis - PostGIS/CartoDB : Store Timestamp for each point in a MultiLineString

转载 作者:行者123 更新时间:2023-12-04 15:35:39 25 4
gpt4 key购买 nike

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

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

在 CartoDB 中,我只能创建 3 种类型的表:MULTIPOINT、MULTILINESTRING 和 MULTIPOLYGON。要插入轨道,我使用的是 MULTILINESTRING 表。

我的第一个尝试是插入时间戳作为 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 的想法,但是我不明白为什么 Car 得到不同的结果和 Walk总距离。任何提示?

解决方案:

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

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 轨迹转换为 Segments,即只有两个坐标的线,并且您可以将 start_time 和 end_time 列分开。

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

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

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 维,实际上我们并不很好地支持它。

关于gis - PostGIS/CartoDB : Store Timestamp for each point in a MultiLineString,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11249052/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com