部标GPS软件平台之百度地图设计

地图是客户端中不可缺少的一个模块,很多人在设计和画图时候,喜欢加上地图引擎这样高大上的字眼,显得自己的平台有内涵,说白了就是用第三方的SDK来开发,早期的GPS监 控软件用的都是mapx、mapxtrem、acrgis之类的,使用的都是本地地图。不仅要购买正版地图,还要购买价格不菲的地图引擎license,服务器版的部署的时候,还要绑定到服务器ID上,现在这种开发方式已被抛弃。现在的百度地图、谷歌地图提供的SDK接口丰富,开发方便,系统稳定,大家都用的很爽。

在部标GPS软件平台中,由于部标过检的时候,指定要求在四维地图和高德地图中任选一家,必须要有审图号,也就是说必要购买,不能用免费的地图,年费三万起,这个无疑加大了运营成本,加重了企业负担,现在物流运输企业挣钱都是从车轱辘里蹦出来的,那些地图厂商坐地收费,因为是年费,要年年交,真是黑。

但是虽说是部标平台,过检是第一步,第二步要给客户用,很多客户由于在实际上网的过程中,对于百度地图已经很接受了,所以经常会指定要求用百度地图。所以我们在设计平 台的时候,考虑多个地图切换和兼容是顺理成章的事情。

百度地图的主要优势如下:
1) 卫星地图,百度的卫星地图虽然远不如谷歌的卫星地图,但是比国内这些四维之类的垃圾要强大多了,谷歌的服务经常被搞,所以忍痛放弃;
2) 百度的javascript SDK和手机SDK较其他地图要完善的多,升级较多;
3) API上要比其他厂商的API要丰富,出来Javascript API,也提供了web service API(高德地图目前不提供), 可以在后台使用C#或Java语言调用web服务接口进行坐标转换和位置解析服务。
5) 地图美观。这个美观主要是在地图图层优化上,不同的zoom下,显示不同的图层,这样地图加载的速度会比较流畅,显示也比较美观。我们自己在开发时,较少考虑这一点,比如车辆图标,当地图缩小到国家级的时候,车辆密密麻麻的显示在一起,实际上要根据不同的zoom进行优化。

购买GPS平台源码,联系我2379423771@qq.com(www.jt808.com)

因为地图SDK都是基于Javascript的SDK,所以设计主要集中在前端的Javascript的设计上。

主要设计模块分为:
1)地图主界面页面(jsp);
2)后台ajax数据调用接口;
3)地图接口js;
4)工具栏;

地图页面主要控制地图界面UI的布局和显示方式,主要的UI部分包括:
1) 地图操作工具条;
2)中心地图DIV;
3) 历史轨迹查询工具条;
4) 实时数据显示栏;
5) 历史轨迹数据显示栏

地图接口js设计
首先根据部标要求的地图功能,我们来设计地图操作的放大、缩小、围栏、线路、标注、图层等接口等。

地图接口的核心就是对较复杂的围栏和线路操作进行一个封装,因为部标808不仅要求围栏和线路指令下发给终端,终端支持报警,还需要平台也能支持围栏报警和路线偏移报警,主要的操作如下:

1)地图上画出多边形、矩形和圆形围栏及线路,并持久化;

2)  绑定给车辆;

3) 下发绑定指令给终端;

4) 车辆进入围栏,触发报警; (这里可能是终端报警,平台也要支持报警)

5)报警后,显示车辆在地图中心;

ajax调用接口
1) 当初始化地图的时候,获取用户的权限,根据权限显示不同的地图操作工具;
2) 获取用户录入的各种图元并加载到地图上显示,如自定义标注、各种类型的围栏、线路等;
3) 实时监控时,不断获取实时数据,并刷新地图车辆位置,画出实时轨迹;
4) 历史轨迹回放时,获取历史数据,并刷新地图车辆位置,画出历史轨迹;
5) 持久化接口,将用户在地图上的标注、画出的围栏、线路等保存到后台数据库;

地图服务模块
1.位置解析模块,不断的解析车辆的坐标,转为地理位置描述,更新到系统中,并在前台显示;
2.加偏服务模块,根据前台的调用request,调用百度地图的加偏地址,转换坐标在前台地图上显示;

3.实时加偏,采用加偏算法和逆向纠偏算法,可以实时的进行百度地图的坐标系统转换,不需要百度自带的webservice服务,避免了百度调用接口的限制及性能的损失,因为每次远程调用http,都要耗费不固定的远程调用时间及调用超时的时间。

另外存在一个问题是,无论是那个地图,在地图上画的区域存储在数据库的都是自己地图坐标系统的经纬度节点,如果要进行电子围栏报警,下发给终端的时候,终端是百分百误报的,因为终端的坐标和地图坐标系统不符,需要在下发给终端前,还原成原始坐标再下发给终端。所以就需要逆向还原的纠偏算法。我们提供正向和反向的算法库。

算法库代码参见:地图服务算法库

需要购买C# .netframework2.0 离线版 DLL 的300元 算法源码600元,包含原始坐标加偏和逆向纠偏还原成原始坐标。提供火星坐标和百度坐标两种接口,不是数据库,提供的是算法源码,实时解析,需要的可以直接联系我(speed.zheng@gmail.com)购买。

其他系列的部标平台设计文章,参见:

GPS部标平台的架构设计(十一)-基于Spring4+SpringMVC4+Mybatis3+Hibernate4+Junit4框架构建高性能企业级的部标GPS监控平台

GPS部标平台的架构设计(四)-百度地图设计的更多相关文章

  1. GPS部标平台的架构设计(三) 基于struts+spring+hibernate+ibatis+quartz+mina框架开发GPS平台

    注意,此版本是2014年研发的基于Spring2.5和Struts2的版本,此版本的源码仍然销售,但已不再提供源码升级的服务,因为目前我们开发的主流新版本是2015-2016年近一年推出的基于spri ...

  2. GPS部标平台的架构设计(十)-基于Asp.NET MVC构建GPS部标平台

    在当前很多的GPS平台当中,有很多是基于asp.NET+siverlight开发的遗留项目,代码混乱而又难以维护,各种耦合和关联,要命的是界面也没见到比Javascript做的控件有多好看,随着需求的 ...

  3. GPS部标平台的架构设计(六)-Android手机客户端和手机查车设计

    对于GPS软件平台,虽然有功能非常丰富的PC端或BS客户端,但是客户也是需要移动客户端来作为自己的辅助工具,也是需要的.做为GPS平台的设计者和开发者,在开发移动客户端的时候,也需要从常规的服务器开发 ...

  4. GPS部标平台的架构设计(五)-地图服务算法库

    GPS平台,需要和各种地图打交道,需要解决以下的问题: 1.坐标偏移,这个不用多说,需要将原始坐标加偏,然后在百度地图或谷歌上显示出来,需要注意的是百度地图的加偏是偏上再偏,谷歌.高德地图等是火星坐标 ...

  5. GPS部标平台的架构设计(一)

    设计和开发一个GPS系统似乎并不太难,很多人马上就想到了地图,放大,缩小之类的功能,最多就是在加点报表之类的东西,就成了. 这种观点造成了业界内,很多GPS系统粗制滥造,不堪大用. 事实上,设计和开发 ...

  6. GPS部标平台的架构设计(二) 可扩展性设计

    在设计的前夕,设计人员喜欢把领导对未来业务的期望带入到设计目标当中,比如当前业务也不过是接入几千辆车,未来业务增长也不过几万台,但领导很多激情,强势要求二期平台的接入能力要达到20万台,这个要求带入到 ...

  7. GPS部标平台的架构设计(九)-GPS监控客户端设计

    交通部的部标过检,所有的测试都是从客户端发起的,也是在客户端体现的,在客户端承载了部标标准所要求的所有的功能,是整个部标平台当中工作量最大的部分,也是最繁琐的部分. 客户端设计面临两个问题: 1.基于 ...

  8. GPS部标监控平台的架构设计(十一)-基于Memcached的分布式Gps监控平台

    部标gps监控平台的架构,随着平台接入的车辆越来越多,架构也面临越来越大的负载挑战,我们当然希望软件尽可能的优化并能够接入更多的车辆,减少在硬件上的投资.但是当车辆增多到某一个临界点的时候,仍然要面临 ...

  9. GPS部标监控平台的架构设计(八)-基于WCF的平台数据通信设计

    总体来讲,GPS部标平台的软件开发是一个对网络通信和应用程序之间通信的技术应用密集型的开发工作,也是有一定设计技术含量的工作. 1.设计通信接口 在设计的时候,根据职责划分,拆分成不同的应用子系统,对 ...

随机推荐

  1. 300ms延时

    具体参考:http://www.jianshu.com/p/6e2b68a93c88 一,简单粗暴型:禁用缩放 <meta name="viewport" content=& ...

  2. tomcat配置详解/优化方案

    Service.xml Server.xml配置文件用于对整个容器进行相关的配置. <Server>元素:是整个配置文件的根元素.表示整个Catalina容器. 属性:className: ...

  3. python 里面的单下划线与双下划线的区别

    python 里面的单下划线与双下划线的区别 Python 用下划线作为变量前缀和后缀指定特殊变量. _xxx 不能用'from moduleimport *'导入 __xxx__ 系统定义名字 __ ...

  4. zorka源码解读之Beanshell与zorka的交互实现

    一.beanshell基础知识从应用程序中调用BeanShell创建一个BeanShell的解释器(interpreter)用eval()和source()命令可以对一个字符串求值和运行一个脚本文件使 ...

  5. 给MySQL增加mysql-udf-http和mysql-udf-json自定义函数,让MySQL有调用http接口和查询直接回JSON的能力

    1.安装mysql-udf-httpyum install -y libcurl*下载地址:http://pan.baidu.com/s/1nuYZqR3tar zxvf mysql-udf-http ...

  6. 两个多项式相加 ( C++ )

    实现两个多项式进行相加 不开辟空间 ( 这要求实现进行相加,代价为两个原链表将被修改) 分析: this>other 就把other当前结点放置在this之前 this<other 就th ...

  7. 【Alpha】Daily Scrum Meeting第二次

    一.Daily Scrum Meeting照片 二.Burndown Chart 由于此次项目延期7天,因此Burndown Chart较第一次会变宽 三.项目进展 登陆模块已经能和服务器交流 可以使 ...

  8. 【Alpha】Daily Scrum Meeting第三次

    本次随笔调换了展示顺序,把重要的内容放前面. 一.本次Daily Scrum Meeting主要内容 说明要完成alpha版本还需要哪些功能 对这些功能进行分析和实现方式的讨论 强调编码规范和变量命名 ...

  9. js实现两个页面之间跳转参数传递

    html在设计时,规定跳转地址后加"?"表示从此开始为跟随页面地址跳转的参数. 有时候,我们希望获得相应的跳转前页面里的内容,这时候我们就可以考虑将内容以参数形式放到地址中传过来, ...

  10. C++的动态内存分配