张 凯,陈 峰,杜 警
(南京信息工程大学信息与控制学院,江苏 南京 210044)
公交在城市公共交通中扮演着很重要的角色。然而,随着城市化进程加快,城市规模不断扩大,机动车数量不断增加,交通拥堵、环境污染等问题日趋严重。城市公交在公共交通中的作用却得不到发挥。“公交优先”的课题应运而生。通过发展“公交优先”,加大公交在城市公共交通运输中的比重,从而缓解交通拥堵、环境污染等问题。为了吸引更多人乘坐公交出行,国内外开发出许多城市公交查询系统以服务于公众。国外发达国家主要采用差分GPS定位技术、交通流诱导技术、地图匹配技术、电子技术、地理信息技术和智能卡等先进技术,形成了集网络通信、信息化服务为一体的先进的公共交通规划和管理系统。国内研究虽然起步较晚,但发展迅速。在一些大城市智能公交电子站牌已经投入使用,互联网上也陆续推出公交在线查询系统。随着物联网和云计算技术的发展,国内学者也着手研究它们在城市智能交通中的应用,最新的车联网技术就是其成果[1]。
本文结合实际需求,使用百度地图接口技术设计一种基于移动客户端的公交实时位置查询系统,实现公交实时位置、公交数量等信息的查询。
本文所要设计的城市公交实时位置手机查询系统是一个基于互联网的应用, 设计查询系统的客户端采用Web App实现。Web App是指基于Web的系统和应用。Web App相对于本地安装程序(Native App)有着开发成本低、适配多种移动设备、跨平台和终端、迭代更新容易、无需安装成本等优势。随着网络带宽的不断增加,移动终端将成为网络中心,互联网从信息网络向应用网络迁徙,App成为应用基本形态,Web App成为趋势,Native App将向Web App演进[2]。当然,任何新事物的发展都会面临着诸多挑战。对于本系统,设计Web App效果图如图1所示,通过百度搜索引擎搜索“智能公交”关键字,将搜出公交实时位置查询工具,该工具即是一个Web App,点击进入应用即可使用该工具,免去了纷繁复杂的本地安装过程及日常对应用程序的升级维护,即点即用。
Figure 1 Web App impression drawing图1 本系统Web App效果图
由于客户端采用Web App实现,整个系统设计采用B/S架构,即浏览器/服务器架构[3]。B/S架构最大的优点就是可以在任何地方进行操作而不用安装任何专门的软件,客户端只需一台能上网的设备,并在设备上安装一个浏览器,通过浏览器访问Web 服务器,并向Web服务器发出相应查询指令;Web服务器则按照指令与数据库服务器进行数据交互,并将结果返回到客户端,完成查询。另外,B/S结构的广泛使用推动AJAX技术的发展,AJAX增加网页的交互性,能进行局部实时刷新。AJAX的局部实时刷新功能对于地图类应用的发展是革命性的,地图数据信息的更新不必再靠刷新整个网页来完成,数据信息的变更将动态地反映在地图上,使得人机界面更友好的同时又能减轻Web服务器和客户端的压力,保障系统稳定、可靠地运行。
为了让公交信息更加直观形象地呈现到客户端,将结合地图开发。经研究,利用百度地图API实现整个查询系统功能。百度地图API是一套由JavaScript语言编写的应用程序接口,为开发者提供了丰富的函数、控件、事件和封装的类,能够帮助我们在网站中构建功能丰富、交互性强的地图应用程序[4]。
整个系统的工作原理如图2所示,在公交车上集成GPS模块(GPS Module),GPS模块通过卫星定位计算出公交车的经纬度;同时,经纬度数据经GPRS DTU传送至数据库服务器,用户使用智能手机等设备经WLAN/WiFi网络访问Web服务器,进入该Web App,按照需求发出查询请求,Web服务器根据请求从数据库调出相应的公交实时信息并标注到百度地图中[5]。对于客户端发出的查询请求,随着时间推移,公交位置的变化则会刷新地图中相应标注的位置,从而在地图中动态模拟出公交的实时位置。
Figure 2 System principle diagram图2 系统工作原理图
系统数据库采用SQL Server 2005,不同于以往的数据库服务器系统,SQL Server 2005是一个网络数据库服务器,但实质上它既是一个关系型数据库,也是一个数据分析平台。本系统中数据库主要用于存储公交车辆的经纬度数据。由于公交数量的众多导致数据量比较庞大,但是SQL Server 2005强大的数据库引擎为系统的可靠运行提供了有力的支持,可以用于构建和管理高性能的数据应用程序[6]。
一个城市中有很多条公交路线,每个路线中有多辆运营的公交车。对于用户的出行,用户只需查询某条特定的公交路线上公交车辆的实时信息。因此,可以以公交路线为查询依据,在查询框中输入所需查询路线名,该路线上的公交车信息即刻反映到地图上,实现查询功能。按照系统功能要求,创建名为gpspoint的数据库,并为每条公交路线建立相应的数据表,用于存储该路线上所有的公交车辆的实时经纬度数据。以gpspoint数据库中line97表为例,设置经纬度表结构如表1所示。
lng1、lat1分别定义为第一辆97路公交车的经度和纬度,lng2、lat2分别定义为第二辆97路公交车的经度和纬度,以此类推,定义完路线上所有公交车辆的经纬度。
Table 1 Table of the latitude and longitude structure表1 经纬度表结构
公交实时位置手机查询系统最关键的技术是将后台数据库中的经纬度数据调出到Web App地图中动态显示,实现前端界面和数据库的通信是基础。Web App前端界面采用驱动方式与SQL Server 2005连接,对ODBC进行配置,确定数据源及其数据访问路径。
以表line97为例,实现与gpspoint数据库的连接之后,需将lng1、lat1数据加载到地图页面中。这一步是实现整个系统功能的关键。经测试,数据库中的经纬度数据不能被前端地图界面直接调用,必须在调出后经过相应数据转换,前端地图页面才能识别。考虑到本系统对实时性具有较高的要求,因此系统运行的效率必须高。经研究,采用RecordsetSet对象的getrows方法将数据提取出来,具体实现代码如下:
Sqlstr=“select lng1,lat1 from line97”
Setrs=conn.Execute(sqlstr)
myarry=rs.GetRows()
rs.close
conn.close
对于数据库数据的操作,一般要用到RecordSet对象,getrows方法传回一个二维的数组变量,在操作数组速度上比RecordSet对象的MoveNext方法快很多,而且可以在取出数组后尽早释放RecordSet对象,从而减少系统资源的占用,提高程序执行效率,优化系统的性能[7]。使用getrows方法传回一个二维的数组,进行相应的数据转换,即把传回的数组赋给一个JavaScript数组,实现代码如下:
%〉
Fori=0 touBound(myarry,2)
%〉
points[“〈%=i%〉”]=newBmap.point
(“〈%=myarry(0,i)%〉”,”〈%=myarry(1,i)%〉”);
%〉
Next
%〉
其中,uBound返回一个long型数据,其值为指定的数组维可用的最大下标。points[“〈%=i%〉”]被定义为接受数据的JavaScript数组,〈%=myarry(0,i)%〉为传回至JavaScript数组中的经度,〈%=myarry(1,i)%〉为传回至JavaScript数组中的纬度。
API自1.1版本起开始支持iPhone、Android这样的移动平台。用户通过手机浏览器就可以访问由地图API创建出来的应用。开发地图类应用首先需完成地图的实例化和初始化,然后向地图中添加支持鼠标拖拽、滚轮缩放、双击放大等交互功能的控件。为了优化用户的页面体验,可以通过Control类来实现自定义控件。地图控件添加完成后,根据系统所需实现的功能,利用JavaScript调用相应的百度地图API。本系统中调用了城市查找API、公交路线获取API等。该公交实时位置手机查询系统调用百度地图API方法如下:
〈script type=“text/javascript”〉
map.enableScrollWheelZoom();
map.enableKeyboard();
map.enableContinuousZoom();
map.enableInertialDragging();
function $(id)
{
returndocument.getElementById(id);}
varcity=newBMap.LocalSearch(map,
{renderOption:{map:map,autoViewport:true}});//地图显示到查询结果处
function search()
{
vars=$(“txtSearch”).value;
city.search(s);//查找城市
}
functionMapMove(pointMover)
{
if(document.getElementById("MarkerMove").checked)
moveMarker.setPoint(pointMover.point);
if(document.getElementById("MapMove").checked)
map.panTo(pointMover.point);
}//调用移动函数
…
〈/Script〉
系统采用的GPS模块获取的经纬度属于WGS84坐标系,而百度地图API采用的是百度自己的坐标系,简称百度坐标系。如果将获取的GPS经纬度不加以处理直接在百度地上标注,则会出现偏差,即所谓的地图偏移。百度坐标系和WGS84坐标系的关系如图3所示。
Figure 3 WGS84 and Baidu coordinate system图3 WGS84与百度坐标系
其中,Ps是P点在WGS84坐标系中的位置,T是坐标系原点相对位移矢量,ωx、ωy、ωz是坐标系旋转角度。
根据上图利用布尔莎七参数法得出模型为:
其中,ΔX0、ΔY0、ΔZ0是平移参数;m是尺度比参数;εx、εy、εz是旋转参数。
采用间接平差模型进行解算:V=AX-L,
其中,V为残差矩阵;X为未知七参数;A为系数矩阵;L为闭合差。
解之:
X=(ATA)-1ATL
求得七参数的值后,每输入一个WGS84坐标值,就能求出它在百度坐标系中的坐标。求出的坐标为空间直角坐标,要应用于平面地图中还需进行投影[8]。百度地图采用的是墨卡托投影,求出的空间直角坐标需代入墨卡托投影正解公式进行投影:
设空间直角坐标为(B1,L1),投影坐标为(X1,Y1),标准纬度为B0,原点纬度为0,原点经度为L0,则:
Y1=K(L1-L0)
整个系统的开发主要使用HTML、JavaScript语言进行编程,系统的各部分功能的实现是通过JavaScript调用百度地图API,根据系统功能要求合理组合设计完成。系统主体功能设计完成后,在局域网中进行了测试,使用智能手机进入该Web App,界面如图4所示。
Figure 4 Mobile phone test interface图4 手机测试界面
以南京市97路公交为例。在“城市”搜索框中输入“南京”,点击“GO”按钮,则定位至南京市地图。在“公交路线”搜索框中输入“97”,点击“搜索”按钮,则高亮整条97路公交路线,并在右边面板上按序显示出该路线上所有的站台名。最后点击“开始监控”按钮,则系统开始运行。其中,红色的标注表示上行车辆,绿色的标注表示下行车辆,白圈代表公交站台。由于有白圈的参照,用户就能掌握公交所在具体位置,达到对公交车辆实时监控的目的。
从系统界面效果看,虽然手机屏幕较小,但由于手机采用的是触摸屏,并且地图中添加了支持缩放、拖拽等控件,使得对系统的操作不受太大影响,在某种程度上其操控性更好。从运行效果看,地图中相应区块每1秒钟动态刷新1次,基本能满足实时查询的要求。另外,由于现阶段移动设备还不能完美支持AJAX技术,可能或出现网络延迟,即用户发出请求到服务器发出响应之间的间隔。通常的解决方案是,使用一个可视化的组件来告诉用户系统正在进行后台操作并且正在读取数据和内容。
在公交出行中,准确地掌握城市公交所处位置是交通参与者进行出行规划的前提。本文从实际需求出发,阐述了城市公交实时位置手机查询系统的设计过程及采用的技术。经测试,系统具有一定的可行性。另外,城市智能公交系统是一个复杂、涉及多方面的系统,还有很多问题值得深入研究。例如,本系统只是智能公交系统的一个子系统,其如何与现行的智能公交系统融合、系统安全性怎样等问题,都需要在进一步研究中完善。
[1] Wu Yong, Xing Jian-ping, Ma Zhen-liang. Research on new generation of city public transportation information system based on internet of things and cloud computing technology[C]∥Proc of the 7th China Intelligent Transport Annual Meeting Symposium-Intelligent Transportation Applications,2012:1. (in Chinese)
[2] Chen Yong. Analysis and prospect of Web app status[J]. Communication & Information Technology, 2012(4):77-78. (in Chinese)
[3] Zhao Jian-li. A multi-mode service vehicle monitoring system[J]. Computer Engineering & Science, 2009,31(10):136-139. (in Chinese)
[4] Yu Xian. The monitoring system of dangerous goods vehicle based on GPS/Google API[D]. Hangzhou:Hangzhou Dianzi University, 2011. (in Chinese)
[5] Gong Hong-mian, Chen C, Bialostozky E, et al. A GPS/GIS method for travel mode detection in New York City[J]. Computers, Environment and Urban Systems, 2012,36(2):131-139.
[6] Gong Yan-jun.Design and implementation of the real-time vehicle monitoring system based on the internet[D]. Beijing:Beijing University of Posts and Telecommunications, 2012. (in Chinese)
[7] Wei Zheng, Wang Jun, Cui Tong-liang. ADO.NET program design course and experiment[M]. Beijing:Tsinghua University Press, 2007. (in Chinese)
[8] Chen Shu. The design and study on map projection transformation[J]. Geomatics & Spatial Information Technology, 2012,35(4):165-170. (in Chinese)
附中文参考文献:
[1] 武勇,邢建平,马振良. 基于物联网和云计算技术的新一代城市公交信息化体系研究[C]∥第七届中国智能交通年会优秀论文集-智能交通应用, 2012:1.
[2] 陈勇. Web App现状分析及展望[J]. 通信与通信技术, 2012(4):77-78.
[3] 赵建立. 一种多服务模式的车辆监控系统[J]. 计算机工程与科学, 2009,31(10):136-139.
[4] 余弦. 基于GPS/Google API的危险品车辆监控系统及应用[D]. 杭州:杭州电子科技大学, 2011.
[6] 贡岩军. 基于互联网的车辆实时监控系统的设计与实现[D]. 北京:北京邮电大学, 2012.
[7] 魏峥,王军,崔同良. ADO.NET程序设计教程与实验[M]. 北京:清华大学出版社, 2007.
[8] 陈姝. 地图投影转换类的设计与研究[J]. 测绘与空间地理信息, 2012,35(4):165-170.