实时公交位置系统的实现
来源:互联网 发布:鬼畜制作软件 编辑:程序博客网 时间:2024/04/29 19:29
假如你的城市,每台公交车上都装了一个gps,更幸运的是你还可以获得这些gps上报的位置信息,那如何做一款公交位置查询app,或者公交位置监控软件呢?
宏观上: 实时性(每辆车每10秒上报一次位置信息,全市上万量公交,个接口的吞吐量以及实时性是一个考验)
准确性(如何准确判断每辆车的位置,以及行驶方向)
微观上: 火星坐标系的转换(gps上报的是原生坐标系,而我们的第三方地图控件都是基于火星坐标系的)
公交方向判断(gps上报上来的是每10s的一点,而http无状态,所以服务器就必须保留之前的状态才能判断出方向)
关于gps原生坐标系,以及火星坐标系看了下面2个链接自然会明白
比较无解的是转化问题,如果没有下面找到的转化算法,我可能要另辟蹊径去辅助修正判断的准确性
伦理片 http://www.dotdy.com/
下面是系统架构图
1.考虑到量的问题,公交位置收集层可以做成一个web集群,开放给gps上报模块一个web接口,作为生产者将位置信息录入redis中供后续模块使用。
2.数据库中的线路以及站点信息可以加载在内存中,或者后期存在redis中,由分布式系统中的master维护。
3.公交调度计算模块作为消费者,不断的去获得生产者的位置信息,进行计算。此处2个算法 公交方向判定算法和公交到站判定算法,前者 由位置点来判定当前公交是正向还是方向,后者根据方向来判定车辆经过的站点
对于 公交方向判定算法,可以根据近两次距离最近的站点,通过比较2个最近站点的order来判断正向还是反向,(只要距离最近的站点变化,我们就可以迅速获得方向 考虑到公交到底站回头的情况,所以判断方向的算法必须快速响应),设想一下以下这种情况
影音先锋电影 http://www.iskdy.com/
距离当前位置最近的是站点3,3的order比站点2大,所以依然不会造成方向性判断错误。
但是这种计算方法只是一个瞬时点,作为一个商用系统这种不确定性是很可怕的,所以还要考虑采取记录车子的到站信息来2方面综合判断。
4.在得到车辆方向的基础上,再判断过站就变的简单了,为每个站点设定一个距离阈值,通过比较距离是否小于这个阈值来判断是否过站。
(gps精度基本在20m以内)
其实第三点和第四点是相辅相成的,如果方向判断正确的基础上自然会得到正确的过站信息,亦可以通过推断的方法来校验 线路判断的准确性。
- 实时公交位置系统的实现
- 湘潭大学-基于Dragonboard 410c的实时公交站牌系统设计(一)
- 湘潭大学-基于Dragonboard 410c的实时公交站牌系统设计(二)
- 湘潭大学-基于Dragonboard 410c的实时公交站牌系统设计(三)
- ios开发之公交卡系统的设计与实现
- 记一个有想法没能力实现的产品形态——实时公交
- web实时系统的实现
- 北京实时公交手机APP技术实现猜想
- 实时多线程系统的日志实现
- DJANGO 实时系统的另类实现
- Socket.io的实时竞拍系统实现
- 非实时系统精确定时器的实现
- 实时弹幕系统的设计与实现
- 实时弹幕系统的设计与实现
- 公交位置软件
- [IT最前沿--有点强大] 都市圈实时公交:一款实时查询公交到站信息的应用
- 【数学建模集训系列】公交查询系统的matlab实现-只含公交的查询
- 使用Socket通信实现Silverlight客户端实时数据的获取(模拟GPS数据,地图实时位置)
- 运算符重载编程题3(C++程序设计第4周)
- 图形验证码最佳实践
- 利用joomla 3.2.0 – 3.4.4 注入漏洞到getshell
- 阿里巴巴开源项目 Druid 负责人温少访谈
- 个人总结面试题
- 实时公交位置系统的实现
- 大整数的加减乘除(C++程序设计第4周)
- 【jQuery】:last-child子元素过滤选择器
- ES6个人学习整理(五)——Set和Map
- Ubuntu在终端中切换Gnome模式
- #1面向对象之类方法#
- HTML5 indexedDB数据库二之索引查询和游标
- sameersbn/gitlab使用记录
- 【C语言提高35】数组指针和指针数组