摘 要: 基于無線定位技術(shù)在Android智能手機平臺上設(shè)計了一個無線購物的LBS系統(tǒng)。該系統(tǒng)針對傳統(tǒng)GPS衛(wèi)星信號無法良好覆蓋復(fù)雜建筑物的應(yīng)用局限性,利用百度地圖API以及定位SDK確定定位因素;結(jié)合GPS、基站及Wi-Fi等信號的情況生成混合定位依據(jù),根據(jù)定位依據(jù)實現(xiàn)移動客戶端的地圖顯示、無線定位和線路導(dǎo)航功能;并在此基礎(chǔ)上為移動用戶提供無線購物服務(wù)。
關(guān)鍵詞: 基于位置服務(wù);Android系統(tǒng)平臺;定位;百度地圖
基于位置服務(wù)LBS(Location Based Service)是移動終端利用通信運營商的移動通信網(wǎng)絡(luò)或者其他定位方式(GPS、Wi-Fi等)來獲取移動終端用戶的地理位置信息,應(yīng)用開發(fā)商基于此用戶位置信息,為用戶提供更多的增值服務(wù),如無線訂餐、打車、社區(qū)交友等。其中典型的應(yīng)用有國外的Foursquare、Gowalla、Whrrl等,國內(nèi)則有大眾點評、微信、易信等。
LBS應(yīng)用的核心是通過定位技術(shù)來獲取移動終端的地理位置信息,通常將定位技術(shù)主要分為基于網(wǎng)絡(luò)的定位技術(shù)和基于移動終端定位技術(shù)兩大類。常見的基于網(wǎng)絡(luò)的定位技術(shù)包括蜂窩網(wǎng)絡(luò)中的到達時間TOA、到達角度AOA、到達時間差TDOA和Wi-Fi無線系統(tǒng)中基于信號強度RSSI定位,RSSI包括信號強度指紋定位和信號強度建模定位兩種方法。Microsoft設(shè)計的RADAR系統(tǒng)是一個典型的基于信號強度指紋分析的定位系統(tǒng),而參考文獻[1]則采用一種基于權(quán)值選擇的定位策略,由于Wi-Fi定位范圍有限,常用于室內(nèi)定位。基于終端的定位技術(shù)通常有衛(wèi)星導(dǎo)航定位GPS和網(wǎng)絡(luò)輔助的GPS定位等,它們是獲取室外地理位置的有效方式。GPS系統(tǒng)根據(jù)星歷參數(shù)EPH和歷書參數(shù)ALM測算到衛(wèi)星與用戶之間的相對位置,借助于導(dǎo)航算法最小二乘法或者卡爾曼濾波法[2]計算得到用戶的地理位置。但GPS衛(wèi)星信號不容易穿透各種復(fù)雜的建筑物,僅僅適用于室外定位并且初次定位時間長。
針對幾種傳統(tǒng)定位技術(shù)應(yīng)用的局限性,本文借助于百度地圖API以及定位SDK,結(jié)合多種定位技術(shù),采用混合定位的方式獲取移動終端的地理位置,并基于此設(shè)計了一個無線購物LBS系統(tǒng)。移動客戶端通過該應(yīng)用除了實現(xiàn)無線購物功能外,還實現(xiàn)了移動用戶的地理位置定位、路線導(dǎo)航及選擇個性化服務(wù)。系統(tǒng)服務(wù)器為客戶端提供無線購物服務(wù),并實現(xiàn)管理員后臺管理和維護操作功能。
1 LBS系統(tǒng)架構(gòu)與方案設(shè)計
LBS應(yīng)用系統(tǒng)通常由移動終端、內(nèi)容提供商、通信網(wǎng)絡(luò)和定位組件[3]4個部分組成,如圖1所示。移動終端是連接網(wǎng)絡(luò)能夠進行語音和數(shù)據(jù)通信的手持電子設(shè)備;內(nèi)容提供商是為移動終端提供數(shù)據(jù)服務(wù)的載體,如數(shù)據(jù)庫服務(wù)器、Web服務(wù)器和應(yīng)用服務(wù)器等;通信網(wǎng)絡(luò)是移動終端與內(nèi)容提供商之間進行數(shù)據(jù)交互的通道;定位組件是為了實現(xiàn)移動終端的定位導(dǎo)航功能,如GPS定位衛(wèi)星、移動網(wǎng)絡(luò)基站和無線網(wǎng)絡(luò)等。
利用混合定位依據(jù)實現(xiàn)Android智能手機無線定位后,為移動用戶提供無線購物功能。無線購物系統(tǒng)基于C/S體系架構(gòu),其中服務(wù)器端主要實現(xiàn)用戶信息和商品信息維護、處理客戶端發(fā)來的HTTP請求以及實現(xiàn)管理員后臺操作;手機客戶端實現(xiàn)用戶注冊登錄、商品瀏覽、購買、評價以及用戶地理位置定位和線路導(dǎo)航功能,如圖2所示。另外,客戶端還將實現(xiàn)地圖加載、地圖瀏覽和地圖查詢功能。
系統(tǒng)服務(wù)器利用MyEclipse集成開發(fā)環(huán)境,將服務(wù)部署在Apache Tomcat應(yīng)用服務(wù)器上,后臺數(shù)據(jù)使用MySQL以及Navicat數(shù)據(jù)庫管理工具以便后臺數(shù)據(jù)的存儲和維護,通過JDBC的方式進行數(shù)據(jù)訪問。客戶端基于Android平臺通過XML語言進行用戶的UI設(shè)計,用Java語言設(shè)計Activity、Service等組件以及HTTP通信接口,以實現(xiàn)客戶端與服務(wù)器端的信息交互。
2 系統(tǒng)實現(xiàn)及關(guān)鍵技術(shù)
2.1 服務(wù)器端設(shè)計模型
無線購物系統(tǒng)服務(wù)器端搭載在Apache Tomcat服務(wù)器上,采用MVC設(shè)計模型,如圖3所示。通過Java Bean封裝數(shù)據(jù)作為數(shù)據(jù)模型,JSP和HTML等技術(shù)完成服務(wù)器端Web頁面的設(shè)計,利用Java語言設(shè)計Servlet作為控制器,控制著整個服務(wù)器端的響應(yīng)并且完成客戶端用戶請求處理。
MVC設(shè)計模型將系統(tǒng)服務(wù)分成Model、View和Controller 3個基本部分,將系統(tǒng)業(yè)務(wù)邏輯與數(shù)據(jù)顯示分離,從而提高應(yīng)用系統(tǒng)的可擴展性和維護性。例如管理員登錄系統(tǒng)后向Servlet發(fā)送請求,Servlet將請求參數(shù)封裝至Java Bean中實現(xiàn)相關(guān)數(shù)據(jù)更新,根據(jù)請求類型查詢后臺數(shù)據(jù)庫,填充查詢結(jié)果到相應(yīng)的視圖頁面并顯示在瀏覽器中,以實現(xiàn)管理員對無線購物系統(tǒng)的管理和維護。
2.2 系統(tǒng)定位原理及過程
利用百度地圖API實現(xiàn)移動終端的混合定位,首先需把百度地圖的開發(fā)包locSDK.jar文件以及與定位相關(guān)的liblocSDK.so文件導(dǎo)入工程中。移動終端的混合定位過程為LBS應(yīng)用程序通過定位SDK發(fā)起定位請求,定位SDK收到請求后根據(jù)定位因素,即終端的網(wǎng)絡(luò)狀態(tài)(如GPS信號、Wi-Fi信號或者基站信號等)生成相應(yīng)的定位依據(jù),將定位依據(jù)發(fā)送至定位服務(wù)器,服務(wù)器處理定位請求后將定位結(jié)果經(jīng)由定位SDK最終回送給LBS應(yīng)用程序,為移動用戶提供必要的地理位置信息和導(dǎo)航路線信息,如圖4所示。
利用百度地圖API開發(fā)過程中用到的幾個主要關(guān)鍵類如下。
(1)Map View:一個顯示地圖的視圖,當被焦點選中時,它能捕獲按鍵事件和觸摸手勢去平移和縮放地圖;
(2)GeoPoint:表示一個地理坐標點,存放經(jīng)度和緯度,以微度的整數(shù)形式存儲;
(3)MKEvent:地圖事件類,主要功能是實現(xiàn)網(wǎng)絡(luò)連接、網(wǎng)絡(luò)數(shù)據(jù)驗證和授權(quán)驗證等;
(4)LocationData:用戶位置信息,存放信息包含了定位精度、經(jīng)緯度坐標、GPS定位衛(wèi)星數(shù)目和定位時速度等;
(5)LocationClient:定位SDK核心類,實現(xiàn)定位參數(shù)設(shè)置、注冊監(jiān)聽函數(shù)及發(fā)起定位功能;
(6)BDLocation:封裝了定位SDK的定位結(jié)果,通過該類用戶可以獲取位置的坐標和精度半徑等信息。
移動用戶終端將依據(jù)實時的網(wǎng)絡(luò)情況采用混合定位方式返回用戶的地理位置信息。在進行定位開發(fā)時,Manifest.xml配置文件必須聲明應(yīng)用程序的使用權(quán)限如Wi-Fi、Internet、Network等,移動客戶端定位的部分示例代碼如下。
mLocClient=new LocationClient(this); //定位初始化
locData=new LocationData();
mLocClient.registerLocationListener(myListener);
LocationClientOption option=new LocationClientOption();
option.setOpenGps(true);//打開GPS
option.setCoorType("bd09ll"); //設(shè)置坐標類型
mLocClient.setLocOption(option);
mLocClient.start();
myLocationOverlay=new locationOverlay(mMapView);
//定位圖層初始化
myLocationOverlay.setData(locData); //設(shè)置定位數(shù)據(jù)
mMapView.getOverlays().add(myLocationOverlay);
//加定位圖層
myLocationOverlay.enableCompass();
mMapView.refresh();//修改定位數(shù)據(jù)后刷新圖層生效
2.3 JDBC數(shù)據(jù)庫訪問技術(shù)
服務(wù)器端的后臺利用MySQL關(guān)系型數(shù)據(jù)庫,存儲著用戶信息、商品信息、后臺管理員信息等數(shù)據(jù),服務(wù)器端利用JDBC(Java Database Connectivity)方式連接關(guān)系型數(shù)據(jù)庫,通過SQL結(jié)構(gòu)化查詢語言來實現(xiàn)數(shù)據(jù)庫數(shù)據(jù)的增刪改查操作。JDBC編程步驟大致分為以下幾步:(1)加載數(shù)據(jù)庫驅(qū)動;(2)通過DriverManager獲取數(shù)據(jù)庫連接;(3)通過Connection對象創(chuàng)建Statement對象;(4)使用Statement執(zhí)行SQL語句;(5)獲取操作結(jié)果集;(6)回收數(shù)據(jù)庫資源,包括關(guān)閉ResultSet、Statement和Connection對象等資源。
這樣,通過JDBC訪問方式實現(xiàn)對主流數(shù)據(jù)庫的操作。并且利用JDBC操作數(shù)據(jù)庫可以實現(xiàn)跨數(shù)據(jù)庫、跨平臺,具有非常優(yōu)秀的可移植性能。
2.4 服務(wù)器與客戶端HTTP通信
在無線購物系統(tǒng)中,客戶端在注冊登錄、瀏覽和購買商品時必須將用戶信息及商品信息封裝后向服務(wù)器端發(fā)起請求,以得到服務(wù)器端的響應(yīng)數(shù)據(jù)。HTTP協(xié)議是實現(xiàn)客戶端與服務(wù)器端數(shù)據(jù)交互和通信的主要途徑??蛻舳送ㄟ^GET和POST兩種請求方式向Web服務(wù)器發(fā)送請求。服務(wù)器端控制器Servlet將根據(jù)客戶端發(fā)起的請求類型調(diào)用不同的響應(yīng)函數(shù)對客戶端請求進行相應(yīng)處理。Web服務(wù)器將處理結(jié)果回送到客戶端進行界面更新,客戶端發(fā)送HTTP請求的Java示例代碼如下。
public static HttpClient httpClient=new DefaultHttpClient();
public static String getRequest(String url) throws Exception{
HttpGet get=new HttpGet(url); //GET請求方式
HttpResponse httpResponse=httpClient.execute(get);
if(httpResponse.getStatusLine().getStatusCode()==200){
String result=EntityUtils.toString(httpResponse.getEntity());
return result;
}
return null;
}
public static String postRequest(String url,Map<String,String> rawParams)throws Exception{
HttpPost post = new HttpPost(url); //POST請求方式
List<NameValuePair> params=new arrayList<NameValuePair>();
for(String key:rawParams.keySet()) {//封裝請求參數(shù)
params.add(new BasicNameValuePair(key,rawParams.get(key)));
}
……
return null;
}
3 實驗結(jié)果與分析
無線購物LBS系統(tǒng)服務(wù)器端在MyEclipse 8.5集成環(huán)境中開發(fā),部署于Tomcat 7.0應(yīng)用服務(wù)器,數(shù)據(jù)庫采用MySQL 5.5;客戶端由Eclipse集成開發(fā)平臺和Android ADT組成,利用Android智能手機對所開發(fā)的系統(tǒng)進行測試。
用戶通過無線購物應(yīng)用獲取到感興趣的商家地址以及商品詳細信息,如圖5(a)所示。移動用戶向定位服務(wù)器發(fā)起定位請求,獲取到移動終端的當前位置,如圖5(b)所示,百度定位SDK將獲取得到的定位信息通過定位圖層顯示在終端上,并顯示出了用戶的當前經(jīng)緯度信息。系統(tǒng)還為用戶和商家之間提供了合理的駕車導(dǎo)航路線,用戶可以選擇送貨上門服務(wù)或者到店取貨服務(wù),如圖5(c)所示。
本文基于Android智能手機平臺,利用百度地圖API及定位SDK結(jié)合多種定位技術(shù)設(shè)計并實現(xiàn)了一個無線購物LBS應(yīng)用。移動用戶借助于本系統(tǒng)可實現(xiàn)地理位置混合定位、地圖導(dǎo)航,并向服務(wù)器獲取基于位置的無線購物服務(wù)。
參考文獻
[1] 雷地球,羅海勇,劉曉明.一種基于Wi-Fi的室內(nèi)定位系統(tǒng)設(shè)計與實現(xiàn)[C].第5屆全國普適計算學術(shù)會議,2010(10):77-79.
[2] 干國強.導(dǎo)航與定位——現(xiàn)代戰(zhàn)爭的北斗星[M].北京:國防工業(yè)出版社,2000.
[3] [西]Richard Ferraro,[土]Murat Aktihanoglu,LBS應(yīng)用開發(fā)[M].李麗,譯.北京:人民郵電出版社,2012.
[4] 周傲英,楊彬,金澈清,等.基于位置的服務(wù):架構(gòu)與進展[J].計算機學報,2011,34(7):1156-1157.
[5] 顧聰,陳益強,劉軍發(fā),等.基于Android平臺的室內(nèi)LBS系統(tǒng)設(shè)計與實現(xiàn)[J].計算機工程與設(shè)計,2012,33(1):396-400.
[6] RETSCHER G, HECHT T. Investigation of location capabilities of four different smart phones for LBS navigation applications[C]. 2012 International Conference on Indoor Positioning and Indoor Navigation, 2012:1-6.
[7] KUMAR S, QADEER M A, GUPTA A. Location based services using Android[C]. IEEE International Conference on Internet Multimedia Services Architecture and Applications(IMSAA), 2009:1-5.
[8] KUSHWAHA A, HUSHWAHA V. Location based services using Android mobile operating system[J]. International Journal of Advances in Engineering & Technology,2011(3):14-20.