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