mysql 经纬度数据 计算距离

MySql 码拜 8年前 (2016-03-12) 2753次浏览
数据库中存了 经纬度信息 id 是设备信息 reportTime 时间信息
本人需要 按照 设备ID 处理经纬度 计算里程 然后累加到一起  最后得到 从几点到几点 哪个设备 里程是多少
mysql 经纬度数据 计算距离
原因是 设备ID 有多条经纬度信息
也就是每一次 后面的经纬度信息 和前一条 进行计算距离 然后累加到一起
sql语句 怎么写
很急
谢谢高手
解决方案

15

   建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
参考一下这个贴子的提问方式http://bbs.csdn.net/topics/320211382

1. 你的 create table xxx .. 语句
2. 你的 insert into xxx … 语句
3. 结果是什么样,(并给以简单的算法描述)
4. 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL)

这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。

15

难在这个地方:也就是每一次 后面的经纬度信息 和前一条 进行计算距离 然后累加到一起 。
这个需要写多条sql语句,需要存储函数来实现。简单的一条sql是搞不定的。
打个比方:
这个设备ID,按照时间排序,做一个游标遍历:
1,取出第一条记录,第一个经纬度,然后根据第一条记录的id来获取后面的经纬度,计算下第一条记录的行程。
2,遍历取出第二条记录,第二个经纬度,然后根据第二条记录的id来获取后面的经纬度,计算下第二天记录的行程。
3……
4,遍历取出最后第N条记录,然后根据第N条的记录来获取后面的经纬度,计算机出行程。
然后在遍历过程中,行程累计加上来。就得到了这个设备的总行程。
大致思路就这样,细节方面怎么写还需要你本人琢磨了,都是简单的sql语句,不难的,就是逻辑复杂点,需要写很多这样的简单的sql语句。
PS:然后你可以将表以及数据准备得完整一些,例如create table的sql,insert into table的sql语句等等,这样子。我们好方便写存储函数来给你弄。

5

你这最好还是放程序中来计算了.
按照 reportTime  升序排序取出设备经纬度信息,
然后计算相邻两点的距离;
最后将计算的距离累加;
经纬度转距离的公式在SQL里面表示会比较复杂.

5

假如表结构不能改,还是建议放到外部程序处理
假如表结构能改,可以考虑试试MySQL的MySQL Spatial Extensions,可以用GLength计算line的长度。

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明mysql 经纬度数据 计算距离
喜欢 (0)
[1034331897@qq.com]
分享 (0)