大家都知道iPod Touch是沒有電話和GPS模塊的, 那么它是如何實(shí)現(xiàn)定位的呢?
其實(shí)它使用的是Wi-Fi定位技術(shù),其原理與基站定位類似:
1.每一個(gè)無線AP都有一個(gè)全球唯一的MAC地址,并且一般來說無線AP在一段時(shí)間內(nèi)是不會(huì)移動(dòng)的
2.設(shè)備在開啟Wi-Fi的情況下,即可掃描并收集周圍的AP信號(hào),無論是否加密,是否已連接,甚至信號(hào)強(qiáng)度不足以顯示在無線信號(hào)列表中,都可以獲取到AP廣播出來的MAC地址

3.設(shè)備將這些能夠標(biāo)示AP的數(shù)據(jù)發(fā)送到位置服務(wù)器,服務(wù)器檢索出每一個(gè)AP的地理位置,并結(jié)合每個(gè)信號(hào)的強(qiáng)弱程度,計(jì)算出設(shè)備的地理位置并返回到用戶設(shè)備
4.位置服務(wù)商要不斷更新绢彤、補(bǔ)充自己的數(shù)據(jù)庫,以保證數(shù)據(jù)的準(zhǔn)確性,畢竟無線AP不像基站塔那樣基本100%不會(huì)移動(dòng)

這樣的位置服務(wù)商現(xiàn)在來說只有Skyhook和Google兩家.他們收集位置數(shù)據(jù)的方式也是相似的
1.主動(dòng)采集:Google的街景拍攝車還有一個(gè)重要的功能就是采集沿途的無線信號(hào),并打上通過GPS定位出的坐標(biāo)回傳至服務(wù)器;
Skyhook在美國及歐洲一些國家也是直接開著信號(hào)采集車采集AP和基站的信號(hào)數(shù)據(jù),相對來說覆蓋城市沒有Google多袋狞,目前中國僅有少數(shù)城市有覆蓋泳叠,并且他們在包括中國在內(nèi)的多個(gè)國家招募有償工作者屹逛,以協(xié)助Skyhook收集位置數(shù)據(jù)。當(dāng)然你也可以直接在其網(wǎng)站上提交一個(gè)MAC地址惠啄。

2.用戶提交: 通常是以靜默方式向同時(shí)擁有Wi-Fi和GPS的終端用戶收集位置數(shù)據(jù)
Android手機(jī)用戶在開啟“使用無線網(wǎng)絡(luò)定位”時(shí)會(huì)提示是否允許Google的定位服務(wù)手機(jī)匿名地點(diǎn)數(shù)據(jù);
同樣的Skyhook的最大客戶Apple也在iPhone的User Guide中說明會(huì)以不能識(shí)別用戶身份的方式收集位置數(shù)據(jù)反浓。

使用這種方式定位一般來說需要與位置服務(wù)器進(jìn)行即時(shí)的網(wǎng)絡(luò)交互,Android正是如此南窗,最好的證明就是關(guān)閉電話和GPS后揍很,單單打開Wifi但不連接任何一個(gè)無線網(wǎng)絡(luò)或者連接一個(gè)沒有接入互聯(lián)網(wǎng)的網(wǎng)絡(luò)時(shí),是無法進(jìn)行定位的万伤。實(shí)際測試的時(shí)候窒悔,發(fā)現(xiàn)這種情況下部分軟件仍然可以定位,但是無論將設(shè)備移動(dòng)到哪里敌买,應(yīng)用中的位置始終不會(huì)變化简珠。因?yàn)锳ndroid的API中提供的方法是LocationManager.getLastKnownPosition,只要是通過這種方式獲取到的位置數(shù)據(jù)虹钮,Android是不會(huì)立即定位的聋庵,而是將最后一次定位的數(shù)據(jù)返回給應(yīng)用,除非應(yīng)用發(fā)起更新位置的請求芙粱。
但是正是在網(wǎng)絡(luò)交互這一點(diǎn)上祭玉,Apple讓人覺得不可思議。前幾天在touch上安裝了一款地圖軟件,并下載了離線地圖,因?yàn)閠ouch不接入WLAN是沒有其他辦法聯(lián)網(wǎng)的,有了離線地圖會(huì)方便很多.一次外出時(shí),打開地圖竟發(fā)現(xiàn),沒有連接任何無線網(wǎng)絡(luò)的情況下,touch竟然準(zhǔn)確地標(biāo)出了我的位置,走了幾步發(fā)現(xiàn)地圖上的標(biāo)記也準(zhǔn)確地移動(dòng)到了新的坐標(biāo).但是系統(tǒng)自帶的Google Map及部分網(wǎng)絡(luò)軟件都無法定位宅倒。
我們知道通過無線可以定位攘宙,但是Touch是如何做到在沒有網(wǎng)絡(luò)交互的情況下定位屯耸?
一開始我猜測是離線地圖中包含位置元數(shù)據(jù),地圖應(yīng)用自行收集環(huán)境信息進(jìn)行定位測算蹭劈,測試如下:
將該地圖應(yīng)用卸載疗绣,重新安裝,安裝成功后第一次打開前即斷開Wi-Fi連接(不關(guān)閉)铺韧,然后打開地圖應(yīng)用多矮,定位成功,只不過地圖無任何顯示

是不是很離奇呢哈打,也就是說并不是離線地圖的功能塔逃,難道是...iOS?
為此我做了個(gè)簡單的實(shí)驗(yàn)料仗,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ìn)地址欄訪問格粪,如果成功獲取到位置信息,就顯示出經(jīng)緯度氛改,否則顯示錯(cuò)誤碼
測試結(jié)果如下:
*開啟wifi不連接任何網(wǎng)絡(luò)(隨著移動(dòng)帐萎,坐標(biāo)會(huì)變)

*關(guān)閉wifi(無論怎么移動(dòng)始終是同一個(gè)坐標(biāo),后來在地圖軟件中測試也是如此)

可以看出胜卤,在開啟Wi-Fi而不連接網(wǎng)絡(luò)的情況下疆导,iOS仍然何以提供定位服務(wù),而關(guān)閉Wi-Fi后其實(shí)跟Android無網(wǎng)絡(luò)的情況相同葛躏,不是實(shí)時(shí)的定位
實(shí)驗(yàn)至此澈段,基本上可以確定,是iOS緩存了歷史地點(diǎn)及附近一定范圍內(nèi)的位置數(shù)據(jù)(并且范圍不小紫新,因?yàn)樵?jīng)去到一個(gè)從未去過的10公里外的度假村均蜜,無連接狀態(tài)仍然成功定位)位置的計(jì)算直接在本機(jī)進(jìn)行李剖。
PS:其實(shí)還有一點(diǎn)挺困惑的芒率,內(nèi)置的Google Map為什么不能定位呢?難道是因?yàn)镚oogle用自己的服務(wù)而不用與Apple合作的Skyhook的服務(wù)嗎(Google Map在已有地圖緩存的情況下定位時(shí)有與Google服務(wù)器交互的數(shù)據(jù)包篙顺,但不能斷定就一定是用于定位的數(shù)據(jù))偶芍?再者,GoogleMap在定位時(shí)狀態(tài)欄會(huì)顯示系統(tǒng)的定位服務(wù)圖標(biāo)德玫,表明調(diào)用了系統(tǒng)Api匪蟀,卻始終無法定位。
既然談到HTML5定位,必然不能不提桌面瀏覽器宰僧,目前主流的瀏覽器都已經(jīng)支持HTML5材彪。W3C所提出的Geolocation API是個(gè)訪問地理位置信息的高層接口,該接口與實(shí)現(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):較準(zhǔn)確的定位、且坐標(biāo)有波動(dòng)
無線開啟蕴轨、不聯(lián)網(wǎng):無法定位
無線關(guān)閉港谊、有線聯(lián)網(wǎng):可定位、偏差較遠(yuǎn)橙弱、始終是同一個(gè)坐標(biāo)
無線關(guān)閉封锉、不聯(lián)網(wǎng):無法定位
第一種:只要無線開關(guān)是打開的,周圍有無線網(wǎng)絡(luò)膘螟,不管是否連接無線網(wǎng)絡(luò)成福、是否是通過無線接入互聯(lián)網(wǎng),只要可以接入互聯(lián)網(wǎng)即可進(jìn)行準(zhǔn)確定位
第三種:應(yīng)該是通過IP定位
第二荆残、四種:無法連接位置服務(wù)器奴艾,故無法定位(如果能定位就超神了~)
下面的圖可以體現(xiàn)定位時(shí)的網(wǎng)絡(luò)交互(測試時(shí)無其他任何網(wǎng)絡(luò)活動(dòng))

檢索下IP即可得知是Google的位置服務(wù) 。好在W3C標(biāo)準(zhǔn)要求瀏覽器爭得用戶同意后才可提供數(shù)據(jù)給第三方網(wǎng)站内斯,否則要天下大亂了蕴潦。。俘闯。
無線AP的覆蓋面越來越廣潭苞,在美國城市基本上地面上任意一點(diǎn)都有3個(gè)以上的無線網(wǎng)絡(luò)覆蓋,國內(nèi)大中城市也緊跟步伐真朗,無線網(wǎng)絡(luò)變得越來越密集此疹,以此種方式定位成本低,速度快遮婶,如果能將精確度提高到10M蝗碎,相信大多GPS都要下崗了,只要有無線網(wǎng)絡(luò)環(huán)境旗扑,對比GPS有絕對的優(yōu)勢蹦骑,還不會(huì)受天氣和建筑物的影響。
聲明:本文中插圖所用iPod Touch與淘寶網(wǎng)無關(guān)臀防,左上角圖標(biāo)為個(gè)人興趣而改造眠菇。
原創(chuàng)作品边败,轉(zhuǎn)載請注明出自xelz's blog
博客地址:http://mingcn.cnblogs.com/
本文地址:http://www.cnblogs.com/mingcn/archive/2011/09/28/location.html