淺析無線定位技術(shù)
其實就是現(xiàn)在最流行的Wi-Fi定位,其原理與基站定位類似:
1.每一個無線AP都有一個全球唯一的MAC地址,并且一般來說無線AP在一段時間內(nèi)是不會移動的
2.設(shè)備在開啟Wi-Fi的情況下,即可掃描并收集周圍的AP信號,無論是否加密,是否已連接,甚至信號強度不足以顯示在無線信號列表中,都可以獲取到AP廣播出來的MAC地址
3.設(shè)備將這些能夠標示AP的數(shù)據(jù)發(fā)送到位置服務(wù)器,服務(wù)器檢索出每一個AP的地理位置,并結(jié)合每個信號的強弱程度,計算出設(shè)備的地理位置并返回到用戶設(shè)備
4.位置服務(wù)商要不斷更新、補充自己的數(shù)據(jù)庫,以保證數(shù)據(jù)的準確性,畢竟無線AP不像基站塔那樣基本100%不會移動
這樣的位置服務(wù)商現(xiàn)在來說只有Skyhook和Google兩家.他們收集位置數(shù)據(jù)的方式也是相似的
1.主動采集:Google的街景拍攝車還有一個重要的功能就是采集沿途的無線信號,并打上通過GPS定位出的坐標回傳至服務(wù)器;
Skyhook在美國及歐洲一些國家也是直接開著信號采集車采集AP和基站的信號數(shù)據(jù),相對來說覆蓋城市沒有Google多,目前中國僅有少數(shù)城市有覆蓋,并且他們在包括中國在內(nèi)的多個國家招募有償工作者,以協(xié)助Skyhook收集位置數(shù)據(jù)。當(dāng)然你也可以直接在其網(wǎng)站上提交一個MAC地址。
使用這種方式定位一般來說需要與位置服務(wù)器進行即時的網(wǎng)絡(luò)交互,Android正是如此,最好的證明就是關(guān)閉電話和GPS后,單單打開Wifi但不連接任何一個無線網(wǎng)絡(luò)或者連接一個沒有接入互聯(lián)網(wǎng)的網(wǎng)絡(luò)時,是無法進行定位的。實際測試的時候,發(fā)現(xiàn)這種情況下部分軟件仍然可以定位,但是無論將設(shè)備移動到哪里,應(yīng)用中的位置始終不會變化。因為Android的API中提供的方法是LocationManager.getLastKnownPosition,只要是通過這種方式獲取到的位置數(shù)據(jù),Android是不會立即定位的,而是將最后一次定位的數(shù)據(jù)返回給應(yīng)用,除非應(yīng)用發(fā)起更新位置的請求。
但是正是在網(wǎng)絡(luò)交互這一點上,Apple讓人覺得不可思議。前幾天在touch上安裝了一款地圖軟件,并下載了離線地圖,因為touch不接入WLAN是沒有其他辦法聯(lián)網(wǎng)的,有了離線地圖會方便很多.一次外出時,打開地圖竟發(fā)現(xiàn),沒有連接任何無線網(wǎng)絡(luò)的情況下,touch竟然準確地標出了我的位置,走了幾步發(fā)現(xiàn)地圖上的標記也準確地移動到了新的坐標.但是系統(tǒng)自帶的Google Map及部分網(wǎng)絡(luò)軟件都無法定位。
我們知道通過無線可以定位,但是Touch是如何做到在沒有網(wǎng)絡(luò)交互的情況下定位?
一開始我猜測是離線地圖中包含位置元數(shù)據(jù),地圖應(yīng)用自行收集環(huán)境信息進行定位測算,測試如下:
將該地圖應(yīng)用卸載,重新安裝,安裝成功后第一次打開前即斷開Wi-Fi連接(不關(guān)閉),然后打開地圖應(yīng)用,定位成功,只不過地圖無任何顯示
#p#
是不是很離奇呢,也就是說并不是離線地圖的功能,難道是...iOS?
為此我做了個簡單的實驗,Safari是支持HTML5的,于是我想到了GeoLocation API:
javascript:navigator.geolocation.getCurrentPosition(function(position){alert(position.coords.latitude+"\n"+position.coords.longitude);},function(err){alert(err.code)});
先完全退出Safari,然后打開,直接將這段js敲進地址欄訪問,如果成功獲取到位置信息,就顯示出經(jīng)緯度,否則顯示錯誤碼
測試結(jié)果如下:
>開啟wifi不連接任何網(wǎng)絡(luò)(隨著移動,坐標會變)
#p#
可以看出,在開啟Wi-Fi而不連接網(wǎng)絡(luò)的情況下,iOS仍然何以提供定位服務(wù),而關(guān)閉Wi-Fi后其實跟Android無網(wǎng)絡(luò)的情況相同,不是實時的定位
實驗至此,基本上可以確定,是iOS緩存了歷史地點及附近一定范圍內(nèi)的位置數(shù)據(jù)(并且范圍不小,因為曾經(jīng)去到一個從未去過的10公里外的度假村,無連接狀態(tài)仍然成功定位)位置的計算直接在本機進行。
PS:其實還有一點挺困惑的,內(nèi)置的Google Map為什么不能定位呢?難道是因為Google用自己的服務(wù)而不用與Apple合作的Skyhook的服務(wù)嗎(Google Map在已有地圖緩存的情況下定位時有與Google服務(wù)器交互的數(shù)據(jù)包,但不能斷定就一定是用于定位的數(shù)據(jù))?再者,GoogleMap在定位時狀態(tài)欄會顯示系統(tǒng)的定位服務(wù)圖標,表明調(diào)用了系統(tǒng)Api,卻始終無法定位。
既然談到HTML5定位,必然不能不提桌面瀏覽器,目前主流的瀏覽器都已經(jīng)支持HTML5。W3C草案所提出的Geolocation API是個訪問地理位置信息的高層接口,該接口與實現(xiàn)設(shè)備緊密相關(guān),API本身對下面的位置信息一無所知。常見的位置信息來源主要包GPS、IP、RFID、AP MAC、cell ID等。那么它的定位效果如何呢?
測試結(jié)果如下:(Dell E4300/Ubuntu 10.10 32bit/FF6.0 & Chrome15dev)
無線開啟、任意聯(lián)網(wǎng)狀態(tài):較準確的定位
無線開啟、不聯(lián)網(wǎng):無法定位
無線關(guān)閉、有線聯(lián)網(wǎng):可定位、偏差較遠
無線關(guān)閉、不聯(lián)網(wǎng):無法定位
第一種:只要無線開關(guān)是打開的,周圍有無線網(wǎng)絡(luò),不管是否連接無線網(wǎng)絡(luò)、是否是通過無線接入互聯(lián)網(wǎng),只要可以接入互聯(lián)網(wǎng)即可進行準確定位
第三種:應(yīng)該是通過IP定位
第二、四種:無法連接位置服務(wù)器,故無法定位(如果能定位就超神了~)
下面的圖可以體現(xiàn)定位時的網(wǎng)絡(luò)交互(測試時無其他任何網(wǎng)絡(luò)活動)
檢索下IP即可得知是Google的位置服務(wù) 。好在W3C標準要求瀏覽器爭得用戶同意后才可提供數(shù)據(jù)給第三方網(wǎng)站,否則要天下大亂了。。。
無線AP的覆蓋面越來越廣,在美國城市基本上地面上任意一點都有3個以上的無線網(wǎng)絡(luò)覆蓋,國內(nèi)大中城市也緊跟步伐,無線網(wǎng)絡(luò)變得越來越密集,以此種方式定位成本低,速度快,如果能將精確度提高到10M,相信大多GPS都要下崗了,只要有無線網(wǎng)絡(luò)環(huán)境,對比GPS有絕對的優(yōu)勢,還不會受天氣和建筑物的影響。
【編輯推薦】