目前全球四大卫星导航系统为全球定位系统(GPS)、“格洛纳斯”系统(GLONASS)、“伽利略”(Galileo)系统和北斗卫星定位导航系统(BDS)。全球定位系统的使用范围最广、技术最完善,但由于历史上著名的SA政策,因此具有一定的安全隐患;“格洛纳斯”系统受苏联解体的影响曾一度废弃,后来俄罗斯通过长期的建设又重新恢复使用;“伽利略”系统是针对民用开发的卫星定位导航系统,由于资金不足以及频段与北斗卫星系统冲突的原因,其建设周期缓慢。北斗卫星定位导航系统可以为用户提供高精度可靠定位、导航、授时服务,近年来已成为我国重点发展的项目之一。北斗卫星定位导航系统在我国有着重要的研究和应用的价值,对于国家安全、促进相关产业的快速发展有着不可替代的作用。
传统的北斗定位终端采用本地地图作为显示载体,但本地地图实时性差、灵活性低,占用大量的存储空间,而且需要不定期地更新数据。随着互联网的不断发展,将北斗定位技术与网络地图结合的方式将成为北斗导航定位的主流,因此运用于北斗系统的电子地图在北斗民用化发展中具有开拓性意义。文中介绍了一种在嵌入式Linux平台上,将百度API和北斗定位信息结合显示定位信息的方法,完成了北斗资料在百度地图上的显示。
1 定位资料北斗的定位数据由UM220-III N北斗芯片获得。UM220-III N可提供标准格式的GPS和北斗定位信息,可以通过芯片特定的串口输入不同的命令使串口打印出不同卫星定位系统的定位信息。向串口向芯片中写入命令:
>$cfgsys, h10
>$cfgsave, h1f
芯片接收命令之后,从串口输出打印出北斗卫星定位的信息,数据更新频率为1 Hz。北斗定位信息的格式与GPS定位信息格式一致,主要为用户提供经纬度、定位质量、卫星数量、PDOP、HDOP、VDOP、UTC时间、位移速度、航向角度等信息。
2 嵌入式BOA服务器的搭建BOA是一款性能卓越而又小巧的嵌入式服务器,能够使用它通过浏览器网页实现远程交互操作[1-2]。BOA在Linux平台上完成移植后,需要设计服务器的主页来显示地图界面,主要是对HTML和XML文件进行编写。
XML是一种简单、与平台无关并被广泛采用的标准,是一种用于标记电子文件使其具有结构性的标记语言,XML相对于HTML的优点是它将用户接口与结构化数据分隔开来。这种数据与显示的分离使得集成来自不同源的数据成为可能,因此可以将北斗模块的数据存储至XML文件中。部分程序如下:
< DATA>
< style type="text/css"/>
< Longitude> < /Longitude>
< Latitude> < /Latitude>
< /DATA>
其中 < Longitude>标签用于存放经度数据, < Latitude>标签用于存放纬度数据。QT程序将串口定位信息传送至XML文件中,HTML文件调用此XML文件即可获得当前定位信息,完成了定位数据上传至服务器的功能。
由于定位信息每秒更新一次,因此需要在地图上实现定位数据的更新而不能刷新整个网页。AJAX的全称是“异步JavaScript和XML”(Asynchronous JavaScript And XML),通过在后台与服务器进行少量数据交换,AJAX可以异步更新网页的部分数据而不用重载整个页面,其核心是利用AJAX的异步交互模式,减轻服务器负担,提高应用操作的执行效率[3]。利用AJAX将XML中存储的经纬度信息传至HTML页面,完成定位数据的实时更新的同时,保证地图完整的显示。部分AJAX程序如下:
function transdata (){
var xmlHttp;
var lon, lat;
lon=xmlHttp.responseXML.documentElement.getElementsByTagName ("Longitude");
x=lon[0].firstChild.nodeValue;
lat=xmlHttp.responseXML.documentElement.getElementsByTagName ("Latitude");
y=lat[0].firstChild.nodeValue;
}
调用网络地图需要使用地图API。百度地图API是一套由JavaScript编写的将百度地图嵌入到网页的应用程序接口,它能够帮助在网站中构建功能丰富、交互性强的地图应用程序[4]。北斗定位信息传到网页页面后经调用百度地图API,将经纬度转化成定位点的形式显示在地图上。首先通过申请百度API秘钥,得到API的使用权限。
在网页加入百度地图API的脚本,加入申请的秘钥后即可使用百度地图的控件和函数,通过控件可以对地图进行缩放、拖拽、切换视图、设置定位点动画效果等操作。添加百度地图API的脚本如下:
< script type="text/JavaScript"
src="http://api.map.baidu.com/apiv=1.2&ak=Zai6MWjst1c28gFRwPxZkN5B">
< /script>
百度地图API默认使用墨卡托投影(Mercator projection)坐标,使用国家测绘局制定的GCJ-02标准,对地理位置进行加密,并在此基础上,进行了BD-09二次加密措施。而由北斗芯片获得的定位信息为硬件定位坐标,使用的是国际经纬度坐标标准CGCS 2000,因此在调用百度地图时需要将其转化成百度坐标。通过使用百度地图API的坐标转换接口BMap.Con-vertor.translate (),将北斗定位坐标转换为百度坐标,最后调用函数setInterval (function, time)来实时更新定位的资料,并最终在页面上显示。
3 QT程序的设计QT是NOKIA公司的图形化接口开发工具,它通过QT的API与Linux I/O进行直接交互,运行速率较高,整体采用面向对象的C++程序设计,拥有良好的体系架构和程序设计模式,界面设计友好,便于程序的开发。QT程序主要完成2个任务,一是将北斗芯片从串口发出的数据进行处理并存入XML文件中,二是通过访问已搭建点的服务器来调用并显示百度地图。
3.1 串口初始化使用第三方编写的qextserialport类进行串口初始化,它继承了QT中的QIODevice,因此该类的一些函数可以被直接使用。通过在mainwindow.cpp的类构造函数中定义串口对象myCom来完成对串口的串口号、波特率、校验位、停止位等初始化操作。启动串口读写事件有2种方式,一种是Polling (查询方式),另一种是EventDriven (事件驱动方式)。Linux下支持Polling模式。与EventDriven模式不同,Polling模式不能根据串口的事件来读写串口,因此需要添加定时器,定时器每个周期结束调用readMyCom ()函数,最后将信号和槽函数关联,延时一段时间,进行读串口操作。部分程序如下:
myCom=new Posix_QextSerialPort ("/dev/ttySAC1", QextSerialBase::Polling);
myCom->setBaudRate (BAUD9600);
myCom->setDataBits (DATA_8);
myCom->setStopBits (STOP_1);
myCom->setParity (PAR_NONE);
myCom->setFlowControl (FLOW_OFF);
myCom->setTimeout (10);
readTimer=new QTimer (this);
readTimer->start (100);
connect (readTimer, SIGNAL (timeout ()), this, SLOT (readMyCom ()));
3.2 接收处理定位数据函数readmyCom ()根据北斗报文协议将定位信息简化生成北斗坐标,通过QXmlStreamWriter stream ()等函数将北斗坐标写入XML文档中。部分程序如下:
QXmlStreamWriter stream ( & file);
stream.setAutoFormatting (true);
stream.writeStartDocument ();
stream.writeStartElement ("DATA");
stream.writeTextElement ("Longitude", longitude);
stream.writeTextElement ("Latitude", latitude);
stream.writeEndElement ();
stream.writeEndDocument ();
3.3 访问BOA服务器通过使用QWebView类可以创建用于加载服务器主页面的浏览器。通过定义Qwebview对象设置页面的大小、编码和网址。向电路板输入命令“ifconfig”查看其IP地址为“http://192.168.1.8”。此外还需要添加浏览器引擎Webkit和网络模块Network。在myCom.pro文件中添加语句QT+=webkit和QT +=network,最后在Linux系统中编译整个QT工程,编译无误后将会生成名为“myCom”的文件,即为最后的执行文件。
4 结果显示将编译成功的整个QT工程移植到ARM中。选择在哈尔滨工程大学21号楼的西南侧的小路进行测量。通过ARM的串口向其输入指令打开执行文件所在的文件夹,输入“./myCom-qws”即可运行程序,最后在电路板显示的效果如图 1所示。
在与电路板处于同一局域网的情况下,在PC机端浏览器上输入网址“https://192.168.1.8/”也可以显示电路板的定位信息,如图 2所示。
实际测试表明,该方法显示的地图可以精确地定位目标所在的位置,并且当目标移动时,地图上的图示也会随之移动,完成了对北斗定位地图的设计。
5 结束语北斗定位导航系统作为“十二五”规划的重要项目,在中国有着广阔的发展空间和市场;随着网络带宽的不断增加、4G和5G逐渐进入市场,未来网络地图必将成为地图定位的重要方向,因此北斗网络地图的研究有着深远的意义。通过文中介绍的方法,可以将北斗定位的信息和百度地图结合到一起进行显示,相比调用本地存储的地图具有更强的实时性,同时由于网络地图的数据量大、更新及时,增加了其定位的范围,理论上可以进行全球定位(取决于百度地图可以显示的范围)。在实际测量中,定位质量的好坏直接取决于北斗芯片的定位数据,这与北斗芯片处理卫星信号的能力、测量时的外界因素(天气、遮盖物等)有关。当然可以在接收到北斗芯片上传的数据之后对其进行滤波处理,加入适当的滤波算法可以使定位精度提升。百度地图API不仅提供了优质的地图显示服务,而且还具有地图搜索、路径规划、LSB云存储等功能,在以后的研究中可以考虑将其加入,以进一步丰富北斗导航定位的应用。
[1] | 赵德志, 章勇, 廖书红.嵌入式Linux及BOA服务器在S3C2410上的移植[C]//2010通信理论与技术新发展--第十五届全国青年通信学术会议论文集(上册).北京, 中国, 2010:85-89. |
[2] | 谢华成, 李晶. 物联网系统中嵌入式BOA的移植与应用[J]. 软件 , 2011, 32 (5) : 106-108 |
[3] | 仰燕兰, 金晓雪, 叶桦. ASP.NET AJAX框架研究及其在WEB开发中的应用[J]. 计算机应用与软件 , 2011, 28 (6) : 195-198 |
[4] | 杜传明. 百度地图API在小型地理信息系统中的应用[J]. 测绘与空间地理信息 , 2011, 34 (2) : 152-153 |
[5] | 潘林, 蔡昌盛, 戴吾蛟, 等. 北斗与GPS数据质量对比分析[J]. 全球定位系统 , 2013, 38 (2) : 23-26 |
[6] | SAMBELLSJ, GUSTAFSONA. JavaScript DOM高级程序设计[M]. 北京: 人民邮电出版社, 2008 : 27 -30. |
[7] | 高博, 李彦, 李云帆, 等. PHP+MySQL+AJAX Web开发给力起飞[M]. 北京: 电子工业出版社, 2011 : 73 -75. |
[8] | 史君, 桑国明. 基于嵌入式移动浏览器的QTWebkit2.1内核研究与开发[J]. 计算机与数字工程 , 2012, 40 (3) : 79-82 |
[9] | 孟泱, 戴明松, 冯发杰, 等. CGCS2000坐标系对现有测绘成果的影响及坐标转换方法的探讨[J]. 工程勘察 , 2010 (S1) : 683-687 |
[10] | 张超, 顾济华. 基于GPS/BDS的移动目标定位追踪系统设计[J]. 现代电子技术 , 2015, 38 (17) : 121-123 |
[11] | 徐庆安. 高斯-克吕格投影坐标转换成地理坐标的一种方法[J]. 安徽地质 , 2012, 22 (4) : 314-317 |
[12] | 唐卫明, 徐坤, 金蕾, 等. 北斗实时动动相对定位精度检测方法[J]. 武汉大学学报:信息科学版 , 2014, 39 (12) : 1472-1476 |