数据库中存了 经纬度信息 id 是设备信息 reportTime 时间信息

本人需要 按照 设备ID 处理经纬度 计算里程 然后累加到一起  最后得到 从几点到几点 哪个设备 里程是多少

mysql 经纬度距离筛选 mysql经纬度距离计算_sql语句

原因是 设备ID 有多条经纬度信息

也就是每一次 后面的经纬度信息 和前一条 进行计算距离 然后累加到一起

sql语句 怎么写

很急

谢谢高手

解决方案

15

建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。

参考一下这个贴子的提问方式

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 经纬度数据 计算距离!