张 凯,陆 钧,孙 跃
(南京信息工程大学 信息与控制学院,江苏 南京210044)
随着社会的发展,汽车保有量迅速增长,道路拥堵情况以及尾气污染日益严重。根据有关统计,机动车尾气排放约占雾霾天气PM2.5来源的四分之一以上,是导致空气污染的重要原因。因此我国需要学习一些发达国家的城市治理经验,一方面大力发展公共交通,另一方面倡导人们最大限度地合理使用汽车,积极拼车出行,以达到减少拥堵和排污的效果[1]。
拼车双方有相似的出行路线和时间表是实现拼车的关键。由于拼车在国内兴起不久,拼车的组织、制度还很不完善。在现有的拼车网站或者应用中,大多是以列表形式罗列出各种拼车需求,用户需要在繁多的拼车需求中找出适合自己的拼车对象,并不是十分方便和快捷。
位置云(LBS云)服务作为云技术在地图定位领域的应用,是一种集位置存储与检索于一体的云服务。LBS云平台一方面可以完成庞大的位置数据存储,另一方面能够返回各类基于位置数据的检索请求,是开发基于位置服务系统的理想选择。
针对以上分析,基于百度LBS云平台,结合Web服务器和数据库,设计和实现了智能拼车匹配系统及其嵌入式客户端。用户只需登录客户端,在地图上将自己的拼车信息发送到服务器,等待服务器返回匹配结果,就能够方便、及时地找到周围合适的拼车伙伴,完成快捷的拼车出行,从而节约出行成本。同时能够减少车辆出行,为缓解交通拥堵情况以及节能减排做出贡献。
系统采用Client/Server(C/S)体系结构,其架构如图1所示。系统主要包括服务器、基本数据库、位置云平台、无线网络和客户端[2]。客户端完成前台操作处理和计算,通过无线网络访问Web服务器和数据库,服务器对客户端的拼车请求进行处理并返回匹配结果。
图1 智能拼车系统架构图
服务器端采用开源的Tomcat服务器,它支持Java类Servlet,在Java环境运行时能够很好地支持运行Web应用部署[3]。当收到客户端请求时,服务器启动并加载Servlet容器,Servlet根据请求生成响应内容并传给服务器,再由服务器将响应返回客户端。
本系统中,需要部署4个Servlet类,分别用于注册、登录、存储以及匹配。服务器与客户端的通信采用Http通信协议的post方法,部署服务器时,先继承HttpServlet抽象类,然后覆盖 HttpServlet的 doGet()方法,通过 Http-ServletRequest对象来获取请求信息,最后由HttpServletResponse对象生成响应结果返回给客户端。写完服务器的Servlet程序后在web.xml文件中进行属性配置,就能够通过8080端口连接部署的服务器[4]。
采用MySQL 5.6数据库软件,在服务器端可以直接引入Java数据库连接(JDBC)驱动,通过接口成功连接数据库之后,发送SQL语句操作数据库并处理结果[5]。
拼车时间和方式的匹配通过对数据库schedule表的条件查询实现。当有用户的匹配请求发送至服务器时,服务器端调用条件查询类来进行筛选,并返回符合条件的结果。
服务器使用JDBC接口连接数据库,在服务器的lib文件夹中插入 mysql-connector-java-bin.jar驱动,Servlet程序中先要注册驱动:Class.forName("com.mysql.jdbc.Driver");然后通过DriverManager.getConnection类连接建立的 test数据库,端口为 3306,使用 prepareStatement()对象执行SQL查询语句,executeQuery()方法把查询结果返回并存放在ResultSet类对象中。此外,在程序中还应设置CharacterEncoding属性为utf-8的编码方式,以避免中文出现乱码。
在拼车系统中,基于百度LBS云服务,将用户发送的出发地和目的地位置信息存储在位置云平台中,利用位置云计算能力,迅速筛选出这两个位置周围符合条件的其他用户,并返回相应用户的基本信息,完成拼车路径的智能匹配。
百度LBS云存储使用接口的方式进行存储管理,用位置数据存储容器databox对所存储的位置数据进行字段定义,包括基本字段databox和扩展字段databox_meta。用单元数据poi存储具体的位置信息,同样包括基本信息poi和扩展信息poi_ect。实现位置数据存储的关键代码如下:
位置云检索同样使用接口方式来发送检索请求。在拼车匹配模块中需要检索出发地和目的地都相近的用户,采用周边检索命令来实现。通过location变量设置检索中心点,格式为:经度,纬度;通过radius变量设置检索半径,单位为m。实现位置数据检索的关键代码如下:
客户端装置要求携带方便、低功耗、高性能、可扩展,因此使用S3C6410嵌入式微处理器作为控制核心。客户端硬件结构如图2所示,主要由S3C6410处理器、GPS定位模块、3G无线模块及外围电路等组成。外围电路包括 256 MB RAM内存、2 GB NAND Flash存储器、7寸液晶屏和串口接口等。
图2 客户端硬件构成
选用GPS模块的型号为WGS100,它采用高灵敏度导航芯片SIRF3,20通道通信,最多可以同时与 20颗卫星建立通信;有RS232和TTL两种电平输出方式,缺省通信速率为9 600 b/s;采用可靠的外置天线,定位稳定,功耗低,可直接由常见的5 V电源供电。在客户端中采用RS232方式与S3C6410处理器连接通信,由GPS模块定位当前位置数据,再由处理器处理后在客户端软件的地图页面定位和显示当前位置,定位过程如图3所示。
图3 GPS定位过程
智能拼车匹配系统的Android客户端基于Eclipse 4.2开发,主要包括注册模块、登录模块、地图模块和拼车模块4个功能模块。
客户端有注册、登录、拼车3个界面,在工程的layout文件夹中,建立3个xml文件进行窗口控件设计。在拼车界面中,需要载入地图页面,其代码如下:
各功能模块程序设计:
(1)登录模块:向服务器验证用户输入的用户名和密码是否正确,并返回提示信息。与服务器的通信采用post方式,关键代码如下:
(2)注册模块:将新用户名、密码等信息发送到服务器进行保存,完成后跳转到登录界面,通信方法与登录模块相同。
(3)地图模块:基于百度地图api接口实现实时定位、地图搜索和路线规划等基本功能。程序中,设置setBuiltInZoomControls对象启用缩放控件,setClickable对象设置地图可点击,继承MyLocationOverlay对象显示当前位置层,用MKSearch()方法来初始化地图搜索功能,设置enableCompass对象开启指南针功能。定位当前位置的关键代码如下:
(4)拼车模块:设置出发地、目的地以及时间区间,点击拼车方式按钮发送拼车信息到服务器,其中出发地和目的地的经纬度存储到位置云平台进行匹配。服务器进行条件筛选后,返回匹配结果并在客户端显示。通过点击地图设置地点,获取经纬度的关键代码如下:
编写好各模块程序后,需要在工程文件根目录下的AndroidManifest.xml文件中进行相关设置,才能正常运行代码[6],其中关键权限设置如下:
将客户端程序打包成apk应用文件,安装到客户端中。在PC端开启服务器和数据库服务,登录客户端后进入主界面,测试发送从当前位置到南京火车站的搭乘需求到服务器,设置时间区间为 9:30~10:30,如图4所示。测试前,预先向服务器发布了20条各不相同的拼车数据,服务器从这些已有的拼车信息中匹配出2个合适的拼车对象,如图5所示。
图4 拼车发布
图5 匹配结果
为了满足人们对于快捷拼车出行的实际需求,设计开发了基于位置云服务的智能拼车匹配系统及其嵌入式客户端装置,利用百度地图API开发接口,实现了地图的定位、搜索等基本功能。结合Tomcat服务器与LBS云存储和检索技术,能够迅速完成拼车位置信息的存储和检索,为用户及时地匹配到周围合适的拼车伙伴。
[1]王茂福.拼车的发展及其效应[J].中国软科学,2010(17):54-55.
[2]韩超,梁泉.Android系统原理及开发要点详解[M].北京:电子工业出版社,2010.
[3]刘尚旺,何东健,闫艳.Tomcat与IIS或Apache服务器集成的应用研究[J].计算机工程与设计,2009,30(10):2541-2546.
[4]陈菁菁.程序员突击—Tomcat原理与Java Web系统开发[M].北京:清华大学出版社,2009.
[5]吴吉义,王中友.程序员突击—MySql原理与Web系统开发[M].北京:清华大学出版社,2009.
[6]何孟翰.Google Android SDK开发实战演练[M].北京:人民邮电出版社,2012.