数据库中存了 经纬度信息 id 是设备信息 reportTime 时间信息
本人需要 按照 设备ID 处理经纬度 计算里程 然后累加到一起 最后得到 从几点到几点 哪个设备 里程是多少
![mysql 经纬度数据 计算距离 mysql 经纬度数据 计算距离](https://www.codebye.com/wp-content/uploads/2016/07/1339000842154214635.jpg)
原因是 设备ID 有多条经纬度信息
也就是每一次 后面的经纬度信息 和前一条 进行计算距离 然后累加到一起
sql语句 怎么写
很急
谢谢高手
本人需要 按照 设备ID 处理经纬度 计算里程 然后累加到一起 最后得到 从几点到几点 哪个设备 里程是多少
![mysql 经纬度数据 计算距离 mysql 经纬度数据 计算距离](https://www.codebye.com/wp-content/uploads/2016/07/1339000842154214635.jpg)
原因是 设备ID 有多条经纬度信息
也就是每一次 后面的经纬度信息 和前一条 进行计算距离 然后累加到一起
sql语句 怎么写
很急
谢谢高手
解决方案
15
建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
参考一下这个贴子的提问方式http://bbs.csdn.net/topics/320211382
参考一下这个贴子的提问方式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语句等等,这样子。我们好方便写存储函数来给你弄。
这个需要写多条sql语句,需要存储函数来实现。简单的一条sql是搞不定的。
打个比方:
这个设备ID,按照时间排序,做一个游标遍历:
1,取出第一条记录,第一个经纬度,然后根据第一条记录的id来获取后面的经纬度,计算下第一条记录的行程。
2,遍历取出第二条记录,第二个经纬度,然后根据第二条记录的id来获取后面的经纬度,计算下第二天记录的行程。
3……
4,遍历取出最后第N条记录,然后根据第N条的记录来获取后面的经纬度,计算机出行程。
然后在遍历过程中,行程累计加上来。就得到了这个设备的总行程。
大致思路就这样,细节方面怎么写还需要你本人琢磨了,都是简单的sql语句,不难的,就是逻辑复杂点,需要写很多这样的简单的sql语句。
PS:然后你可以将表以及数据准备得完整一些,例如create table的sql,insert into table的sql语句等等,这样子。我们好方便写存储函数来给你弄。
5
你这最好还是放程序中来计算了.
按照 reportTime 升序排序取出设备经纬度信息,
然后计算相邻两点的距离;
最后将计算的距离累加;
经纬度转距离的公式在SQL里面表示会比较复杂.
按照 reportTime 升序排序取出设备经纬度信息,
然后计算相邻两点的距离;
最后将计算的距离累加;
经纬度转距离的公式在SQL里面表示会比较复杂.
5
假如表结构不能改,还是建议放到外部程序处理
假如表结构能改,可以考虑试试MySQL的MySQL Spatial Extensions,可以用GLength计算line的长度。
假如表结构能改,可以考虑试试MySQL的MySQL Spatial Extensions,可以用GLength计算line的长度。