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