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