淺析無線定位技術

大家都知道iPod Touch是沒有電話和GPS模塊的, 那么它是如何實現定位的呢?

其實它使用的是Wi-Fi定位技術,其原理與基站定位類似:

1.每一個無線AP都有一個全球唯一的MAC地址,并且一般來說無線AP在一段時間內是不會移動的

2.設備在開啟Wi-Fi的情況下,即可掃描并收集周圍的AP信號,無論是否加密,是否已連接,甚至信號強度不足以顯示在無線信號列表中,都可以獲取到AP廣播出來的MAC地址


3.設備將這些能夠標示AP的數據發送到位置服務器,服務器檢索出每一個AP的地理位置,并結合每個信號的強弱程度,計算出設備的地理位置并返回到用戶設備

4.位置服務商要不斷更新、補充自己的數據庫,以保證數據的準確性,畢竟無線AP不像基站塔那樣基本100%不會移動


這樣的位置服務商現在來說只有Skyhook和Google兩家.他們收集位置數據的方式也是相似的

1.主動采集:Google的街景拍攝車還有一個重要的功能就是采集沿途的無線信號,并打上通過GPS定位出的坐標回傳至服務器;


Skyhook在美國及歐洲一些國家也是直接開著信號采集車采集AP和基站的信號數據,相對來說覆蓋城市沒有Google多,目前中國僅有少數城市有覆蓋,并且他們在包括中國在內的多個國家招募有償工作者,以協助Skyhook收集位置數據。當然你也可以直接在其網站上提交一個MAC地址。

2.用戶提交: 通常是以靜默方式向同時擁有Wi-Fi和GPS的終端用戶收集位置數據

Android手機用戶在開啟“使用無線網絡定位”時會提示是否允許Google的定位服務手機匿名地點數據;

同樣的Skyhook的最大客戶Apple也在iPhone的User Guide中說明會以不能識別用戶身份的方式收集位置數據。


使用這種方式定位一般來說需要與位置服務器進行即時的網絡交互,Android正是如此,最好的證明就是關閉電話和GPS后,單單打開Wifi但不連接任何一個無線網絡或者連接一個沒有接入互聯網的網絡時,是無法進行定位的。實際測試的時候,發現這種情況下部分軟件仍然可以定位,但是無論將設備移動到哪里,應用中的位置始終不會變化。因為Android的API中提供的方法是LocationManager.getLastKnownPosition,只要是通過這種方式獲取到的位置數據,Android是不會立即定位的,而是將最后一次定位的數據返回給應用,除非應用發起更新位置的請求。

但是正是在網絡交互這一點上,Apple讓人覺得不可思議。前幾天在touch上安裝了一款地圖軟件,并下載了離線地圖,因為touch不接入WLAN是沒有其他辦法聯網的,有了離線地圖會方便很多.一次外出時,打開地圖竟發現,沒有連接任何無線網絡的情況下,touch竟然準確地標出了我的位置,走了幾步發現地圖上的標記也準確地移動到了新的坐標.但是系統自帶的Google Map及部分網絡軟件都無法定位。

我們知道通過無線可以定位,但是Touch是如何做到在沒有網絡交互的情況下定位?

一開始我猜測是離線地圖中包含位置元數據,地圖應用自行收集環境信息進行定位測算,測試如下:

將該地圖應用卸載,重新安裝,安裝成功后第一次打開前即斷開Wi-Fi連接(不關閉),然后打開地圖應用,定位成功,只不過地圖無任何顯示


是不是很離奇呢,也就是說并不是離線地圖的功能,難道是...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敲進地址欄訪問,如果成功獲取到位置信息,就顯示出經緯度,否則顯示錯誤碼

測試結果如下:

>開啟wifi不連接任何網絡(隨著移動,坐標會變)


>關閉wifi(無論怎么移動始終是同一個坐標,后來在地圖軟件中測試也是如此)


可以看出,在開啟Wi-Fi而不連接網絡的情況下,iOS仍然何以提供定位服務,而關閉Wi-Fi后其實跟Android無網絡的情況相同,不是實時的定位

實驗至此,基本上可以確定,是iOS緩存了歷史地點及附近一定范圍內的位置數據(并且范圍不小,因為曾經去到一個從未去過的10公里外的度假村,無連接狀態仍然成功定位)位置的計算直接在本機進行。

PS:其實還有一點挺困惑的,內置的Google Map為什么不能定位呢?難道是因為Google用自己的服務而不用與Apple合作的Skyhook的服務嗎(Google Map在已有地圖緩存的情況下定位時有與Google服務器交互的數據包,但不能斷定就一定是用于定位的數據)?再者,GoogleMap在定位時狀態欄會顯示系統的定位服務圖標,表明調用了系統Api,卻始終無法定位。

既然談到HTML5定位,必然不能不提桌面瀏覽器,目前主流的瀏覽器都已經支持HTML5。W3C所提出的Geolocation API是個訪問地理位置信息的高層接口,該接口與實現設備緊密相關,API本身對下面的位置信息一無所知。常見的位置信息來源主要包GPS、IP、RFID、AP MAC、cell ID等。那么它的定位效果如何呢?

測試結果如下:(Dell E4300/Ubuntu 10.10 32bit/FF6.0 & Chrome15dev)

無線開啟、任意聯網狀態:較準確的定位、且坐標有波動

無線開啟、不聯網:無法定位

無線關閉、有線聯網:可定位、偏差較遠、始終是同一個坐標

無線關閉、不聯網:無法定位

第一種:只要無線開關是打開的,周圍有無線網絡,不管是否連接無線網絡、是否是通過無線接入互聯網,只要可以接入互聯網即可進行準確定位

第三種:應該是通過IP定位

第二、四種:無法連接位置服務器,故無法定位(如果能定位就超神了~)

下面的圖可以體現定位時的網絡交互(測試時無其他任何網絡活動)


檢索下IP即可得知是Google的位置服務 。好在W3C標準要求瀏覽器爭得用戶同意后才可提供數據給第三方網站,否則要天下大亂了。。。

無線AP的覆蓋面越來越廣,在美國城市基本上地面上任意一點都有3個以上的無線網絡覆蓋,國內大中城市也緊跟步伐,無線網絡變得越來越密集,以此種方式定位成本低,速度快,如果能將精確度提高到10M,相信大多GPS都要下崗了,只要有無線網絡環境,對比GPS有絕對的優勢,還不會受天氣和建筑物的影響。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 大家都知道iPod Touch是沒有電話和GPS模塊的, 那么它是如何實現定位的呢?其實它使用的是Wi-Fi定位技...
    Bourbon閱讀 474評論 0 3
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,316評論 25 708
  • 看完這部電影,然后去看了豆瓣評分5.0,個人覺得這部劇還算可以吧。 其實在剛開始看這部電影的時候,前半段,也就是覺...
    與你我同在閱讀 1,019評論 0 0
  • 日子 日子是什么? 柴米油鹽醬醋茶。 期待, ...
    遇見love閱讀 92評論 0 1
  • 隱式轉換 整形提升數組轉換成指針指針轉換指向任意非常量的指針能轉換成void * 轉換成布爾類型 轉換成常量 類類...
    扎Zn了老Fe閱讀 192評論 0 2