轨迹时空数据存储对比分析

轨迹时空数据存储对比分析

背景

最近有一批车辆的轨迹数据需要用postgresql管理起来。数据格式相对比较简单,就是一堆csv文件,每行一个点,包括x,y,t和其他的一些速度,方向属性信息。

方案对比

能想到的最简答的方法就是把csv映射到数据库的表结构,然后把x,y 够构建成一个坐标点。这样存储上最简单,但是没法进行分析操作。有没有更好的方法呢?

说到使用postgresql管理空间数据,立马就会想到大名鼎鼎的postgis。搜了一下,postgis还真有轨迹分析功能:http://postgis.net/docs/manual-2.5/reference.html#Operators 专门有Temporal Support的一章,有四个函数用于具有时态信息的几何数据(轨迹数据)的分析。pg大神也写过一篇介绍的文章http://mysql.taobao.org/monthly/2018/06/10/。 具体的方法就是把M值作为时间信息,计算和分析的时候就按照M值来作为时间计算(真正需要M值的时候怎么办??)

最后刚在网上看到了阿里云刚推出的时空数据库ganos(https://help.aliyun.com/document_detail/107501.html?spm=a2c4g.11186623.6.1133.6a4f24d8LvtXpQ)。ganos有个专门的模块支持移动对象数据库,从文档来看功能还是挺全面的。

功能对比

如果轨迹还是使用点的方式进行管理,实在是有点low,直接pass掉。剩下两种方案,postgis和ganos。就以一个最简单的时空相交查询来比较下这个两个方案。

公司正好买了阿里云的云数据库,刚好可以拿来测试下:

数据类型

创建表时postgis必须指定为LinestringM数据类型,而ganos使用的是trajectory这个数据类型,比postgis更为直观。

-- postgis
CREATE TABLE traj_postgis
{
...
track geometry(LineStringM)
);

-- ganos
CREATE TABLE
traj_ganos(
...
track trajectory
);

插入数据

postgis和ganos都需要把轨迹点组合为线段。好吧,这个也不是什么难事,按天组合就好,最大的问题是postgis需要把时间戳转为M值!!! 这个实在是很不方便也很不直观。相比而言,ganos的sql清楚多了。

-- postgis m 值
INSERT INTO traj_postgis(...,track) 
VALUES (...,ST_GeometryFromText('LINESTRINGM (121.574898 31.195130 1195319307,121.573458 31.197597 1195319312, ...) ',4326));

-- ganos
INSERT INTO traj_ganos(..., track) 
VALUES(..., ST_MakeTrajectory('STPOINT'::leaftype,ST_GeomFromText('LINESTRING(121.574898 31.195130 1195319307,121.573458 31.197597, ...)',4326), ARRAY['2007-11-1717:08:27
  • 4
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值