文獻(xiàn)標(biāo)識碼: A
文章編號: 0258-7998(2013)08-0020-03
隨著社會的發(fā)展,汽車保有量迅速增長,道路擁堵情況以及尾氣污染日益嚴(yán)重。根據(jù)有關(guān)統(tǒng)計,機(jī)動車尾氣排放約占霧霾天氣PM2.5來源的四分之一以上,是導(dǎo)致空氣污染的重要原因。因此我國需要學(xué)習(xí)一些發(fā)達(dá)國家的城市治理經(jīng)驗,一方面大力發(fā)展公共交通,另一方面倡導(dǎo)人們最大限度地合理使用汽車,積極拼車出行,以達(dá)到減少擁堵和排污的效果[1]。
拼車雙方有相似的出行路線和時間表是實現(xiàn)拼車的關(guān)鍵。由于拼車在國內(nèi)興起不久,拼車的組織、制度還很不完善。在現(xiàn)有的拼車網(wǎng)站或者應(yīng)用中,大多是以列表形式羅列出各種拼車需求,用戶需要在繁多的拼車需求中找出適合自己的拼車對象,并不是十分方便和快捷。
位置云(LBS云)服務(wù)作為云技術(shù)在地圖定位領(lǐng)域的應(yīng)用,是一種集位置存儲與檢索于一體的云服務(wù)。LBS云平臺一方面可以完成龐大的位置數(shù)據(jù)存儲,另一方面能夠返回各類基于位置數(shù)據(jù)的檢索請求,是開發(fā)基于位置服務(wù)系統(tǒng)的理想選擇。
針對以上分析,基于百度LBS云平臺,結(jié)合Web服務(wù)器和數(shù)據(jù)庫,設(shè)計和實現(xiàn)了智能拼車匹配系統(tǒng)及其嵌入式客戶端。用戶只需登錄客戶端,在地圖上將自己的拼車信息發(fā)送到服務(wù)器,等待服務(wù)器返回匹配結(jié)果,就能夠方便、及時地找到周圍合適的拼車伙伴,完成快捷的拼車出行,從而節(jié)約出行成本。同時能夠減少車輛出行,為緩解交通擁堵情況以及節(jié)能減排做出貢獻(xiàn)。
1 系統(tǒng)設(shè)計
1.1 系統(tǒng)架構(gòu)
系統(tǒng)采用Client/Server(C/S)體系結(jié)構(gòu),其架構(gòu)如圖1所示。系統(tǒng)主要包括服務(wù)器、基本數(shù)據(jù)庫、位置云平臺、無線網(wǎng)絡(luò)和客戶端[2]。客戶端完成前臺操作處理和計算,通過無線網(wǎng)絡(luò)訪問Web服務(wù)器和數(shù)據(jù)庫,服務(wù)器對客戶端的拼車請求進(jìn)行處理并返回匹配結(jié)果。
1.2 服務(wù)器設(shè)計
服務(wù)器端采用開源的Tomcat服務(wù)器,它支持Java類Servlet,在Java環(huán)境運行時能夠很好地支持運行Web應(yīng)用部署[3]。當(dāng)收到客戶端請求時,服務(wù)器啟動并加載Servlet容器,Servlet根據(jù)請求生成響應(yīng)內(nèi)容并傳給服務(wù)器,再由服務(wù)器將響應(yīng)返回客戶端。
本系統(tǒng)中,需要部署4個Servlet類,分別用于注冊、登錄、存儲以及匹配。服務(wù)器與客戶端的通信采用Http通信協(xié)議的post方法,部署服務(wù)器時,先繼承HttpServlet抽象類,然后覆蓋HttpServlet的doGet()方法,通過Http-ServletRequest對象來獲取請求信息,最后由HttpServletResponse對象生成響應(yīng)結(jié)果返回給客戶端。寫完服務(wù)器的Servlet程序后在web.xml文件中進(jìn)行屬性配置,就能夠通過8080端口連接部署的服務(wù)器[4]。
1.3 數(shù)據(jù)庫設(shè)計
采用MySQL 5.6數(shù)據(jù)庫軟件,在服務(wù)器端可以直接引入Java數(shù)據(jù)庫連接(JDBC)驅(qū)動,通過接口成功連接數(shù)據(jù)庫之后,發(fā)送SQL語句操作數(shù)據(jù)庫并處理結(jié)果[5]。
拼車時間和方式的匹配通過對數(shù)據(jù)庫schedule表的條件查詢實現(xiàn)。當(dāng)有用戶的匹配請求發(fā)送至服務(wù)器時,服務(wù)器端調(diào)用條件查詢類來進(jìn)行篩選,并返回符合條件的結(jié)果。
服務(wù)器使用JDBC接口連接數(shù)據(jù)庫,在服務(wù)器的lib文件夾中插入mysql-connector-java-bin.jar驅(qū)動,Servlet程序中先要注冊驅(qū)動:Class.forName("com.mysql.jdbc.Driver");然后通過DriverManager.getConnection類連接建立的test數(shù)據(jù)庫,端口為3306,使用prepareStatement( )對象執(zhí)行SQL查詢語句,executeQuery( )方法把查詢結(jié)果返回并存放在ResultSet類對象中。此外,在程序中還應(yīng)設(shè)置CharacterEncoding屬性為utf-8的編碼方式,以避免中文出現(xiàn)亂碼。
2 位置云技術(shù)
在拼車系統(tǒng)中,基于百度LBS云服務(wù),將用戶發(fā)送的出發(fā)地和目的地位置信息存儲在位置云平臺中,利用位置云計算能力,迅速篩選出這兩個位置周圍符合條件的其他用戶,并返回相應(yīng)用戶的基本信息,完成拼車路徑的智能匹配。
2.1 位置云存儲的實現(xiàn)
百度LBS云存儲使用接口的方式進(jìn)行存儲管理,用位置數(shù)據(jù)存儲容器databox對所存儲的位置數(shù)據(jù)進(jìn)行字段定義,包括基本字段databox和擴(kuò)展字段databox_meta。用單元數(shù)據(jù)poi存儲具體的位置信息,同樣包括基本信息poi和擴(kuò)展信息poi_ect。實現(xiàn)位置數(shù)據(jù)存儲的關(guān)鍵代碼如下:
url: api.map.baidu.com/geodata/databox
postfield:method=create&name=carpool&ak=key
//創(chuàng)建名為carpool的databox
url: api.map.baidu.com/geodata/poi
postfield:method=create&name=start&ak=key
//創(chuàng)建存儲出發(fā)地信息的poi
postfield:method=create&name=destination&ak=key
//創(chuàng)建存儲目的地信息的poi
2.2 位置云檢索的實現(xiàn)
位置云檢索同樣使用接口方式來發(fā)送檢索請求。在拼車匹配模塊中需要檢索出發(fā)地和目的地都相近的用戶,采用周邊檢索命令來實現(xiàn)。通過location變量設(shè)置檢索中心點,格式為:經(jīng)度,緯度;通過radius變量設(shè)置檢索半徑,單位為m。實現(xiàn)位置數(shù)據(jù)檢索的關(guān)鍵代碼如下:
url: api.map.baidu.com/geodata/poi
GET:api.map.baidu.com/geosearch/start&location=lon,
lat&radius=3000&scope=2&ak=key
//檢索出發(fā)地周圍3 km的拼車用戶
GET:api.map.baidu.com/geosearch/destination&location=
lond,latd&radius=3000&scope=2&ak=key
//檢索目的地周圍3 km的拼車用戶
3 客戶端設(shè)計
3.1 客戶端硬件設(shè)計
客戶端裝置要求攜帶方便、低功耗、高性能、可擴(kuò)展,因此使用S3C6410嵌入式微處理器作為控制核心??蛻舳擞布Y(jié)構(gòu)如圖2所示,主要由S3C6410處理器、GPS定位模塊、3G無線模塊及外圍電路等組成。外圍電路包括256 MB RAM內(nèi)存、2 GB NAND Flash存儲器、7寸液晶屏和串口接口等。
選用GPS模塊的型號為WGS100,它采用高靈敏度導(dǎo)航芯片SIRF3,20通道通信,最多可以同時與20顆衛(wèi)星建立通信;有RS232和TTL兩種電平輸出方式,缺省通信速率為9 600 b/s;采用可靠的外置天線,定位穩(wěn)定,功耗低,可直接由常見的5 V電源供電。在客戶端中采用RS232方式與S3C6410處理器連接通信,由GPS模塊定位當(dāng)前位置數(shù)據(jù),再由處理器處理后在客戶端軟件的地圖頁面定位和顯示當(dāng)前位置,定位過程如圖3所示。
3.2 客戶端軟件設(shè)計
智能拼車匹配系統(tǒng)的Android客戶端基于Eclipse 4.2開發(fā),主要包括注冊模塊、登錄模塊、地圖模塊和拼車模塊4個功能模塊。
客戶端有注冊、登錄、拼車3個界面,在工程的layout文件夾中,建立3個xml文件進(jìn)行窗口控件設(shè)計。在拼車界面中,需要載入地圖頁面,其代碼如下:
<com.baidu.mapapi.MapView//地圖窗口接口
android:id="@+id/bmapsView"//窗口id
android:layout_width="fill_parent"//寬度
android:layout_height="fill_parent"//高度
android:clickable="true" /> //地圖可點擊
各功能模塊程序設(shè)計:
(1)登錄模塊:向服務(wù)器驗證用戶輸入的用戶名和密碼是否正確,并返回提示信息。與服務(wù)器的通信采用post方式,關(guān)鍵代碼如下:
StringurlStr = "http://172.16.72.186:8080/loginser/login";
//登錄Servlet的路徑
HttpPost request = new HttpPost(urlStr);
//request繼承HttpPost方法
HttpResponse response =client.execute(request);
//執(zhí)行請求返回響應(yīng)
(2)注冊模塊:將新用戶名、密碼等信息發(fā)送到服務(wù)器進(jìn)行保存,完成后跳轉(zhuǎn)到登錄界面,通信方法與登錄模塊相同。
(3)地圖模塊:基于百度地圖api接口實現(xiàn)實時定位、地圖搜索和路線規(guī)劃等基本功能。程序中,設(shè)置setBu-
iltInZoomControls對象啟用縮放控件,setClickable對象設(shè)置地圖可點擊,繼承MyLocationOverlay對象顯示當(dāng)前位置層,用MKSearch( )方法來初始化地圖搜索功能,設(shè)置enableCompass對象開啟指南針功能。定位當(dāng)前位置的關(guān)鍵代碼如下:
pt=new GeoPoint((int)(location.getLatitude() * 1e6),(int)
(location.getLongitude() * 1e6));//獲取當(dāng)前經(jīng)緯度
mapView.getController().animateTo(pt);
//地圖上標(biāo)記當(dāng)前位置
(4)拼車模塊:設(shè)置出發(fā)地、目的地以及時間區(qū)間,點擊拼車方式按鈕發(fā)送拼車信息到服務(wù)器,其中出發(fā)地和目的地的經(jīng)緯度存儲到位置云平臺進(jìn)行匹配。服務(wù)器進(jìn)行條件篩選后,返回匹配結(jié)果并在客戶端顯示。通過點擊地圖設(shè)置地點,獲取經(jīng)緯度的關(guān)鍵代碼如下:
public boolean onTap(GeoPoint p, MapView mapView) {
//點擊地圖事件監(jiān)聽
GeoPoint gpoint = newGeoPoint((int)lat,(int)lon);
//獲取點擊地點經(jīng)緯度
編寫好各模塊程序后,需要在工程文件根目錄下的AndroidManifest.xml文件中進(jìn)行相關(guān)設(shè)置,才能正常運行代碼[6],其中關(guān)鍵權(quán)限設(shè)置如下:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>//設(shè)置位置服務(wù)
<uses-permission android:name="android.permission.
INTERNET"></uses-permission> //設(shè)置網(wǎng)絡(luò)權(quán)限
4 系統(tǒng)功能測試
將客戶端程序打包成apk應(yīng)用文件,安裝到客戶端中。在PC端開啟服務(wù)器和數(shù)據(jù)庫服務(wù),登錄客戶端后進(jìn)入主界面,測試發(fā)送從當(dāng)前位置到南京火車站的搭乘需求到服務(wù)器,設(shè)置時間區(qū)間為9:30~10:30,如圖4所示。測試前,預(yù)先向服務(wù)器發(fā)布了20條各不相同的拼車數(shù)據(jù),服務(wù)器從這些已有的拼車信息中匹配出2個合適的拼車對象,如圖5所示。
為了滿足人們對于快捷拼車出行的實際需求,設(shè)計開發(fā)了基于位置云服務(wù)的智能拼車匹配系統(tǒng)及其嵌入式客戶端裝置,利用百度地圖API開發(fā)接口,實現(xiàn)了地圖的定位、搜索等基本功能。結(jié)合Tomcat服務(wù)器與LBS云存儲和檢索技術(shù),能夠迅速完成拼車位置信息的存儲和檢索,為用戶及時地匹配到周圍合適的拼車伙伴。
參考文獻(xiàn)
[1] 王茂福.拼車的發(fā)展及其效應(yīng)[J].中國軟科學(xué),2010(17):54-55.
[2] 韓超,梁泉.Android系統(tǒng)原理及開發(fā)要點詳解[M].北京:電子工業(yè)出版社,2010.
[3] 劉尚旺,何東健,閆艷.Tomcat與IIS或Apache服務(wù)器集 成的應(yīng)用研究[J].計算機(jī)工程與設(shè)計,2009,30(10):2541-2546.
[4] 陳菁菁.程序員突擊—Tomcat原理與Java Web系統(tǒng)開發(fā)[M]. 北京:清華大學(xué)出版社,2009.
[5] 吳吉義,王中友.程序員突擊—MySql原理與Web系統(tǒng)開發(fā)[M].北京:清華大學(xué)出版社,2009.
[6] 何孟翰.Google Android SDK開發(fā)實戰(zhàn)演練[M].北京:人民郵電出版社,2012.