1. 程式人生 > >知乎牛人--移動裝置的WiFi定位原理

知乎牛人--移動裝置的WiFi定位原理


<img src="https://pic2.zhimg.com/15b4b8fd4af239f04429cbd18136cd49_b.jpg" data-rawwidth="474" data-rawheight="600" class="origin_image zh-lightbox-thumb" width="474" data-original="https://pic2.zhimg.com/15b4b8fd4af239f04429cbd18136cd49_r.jpg">

但是三角定位也有其缺點,就是定位結果非常不精準。原因很簡單,因為 AP 的位置和手機距離 AP 的長度都是推算出的,誤差+誤差=更大的誤差。

指紋定位演算法
這演算法只能在學校實驗室拿小樣本來玩兒玩兒,真正做 Wi-Fi 定位的 App根本不敢用。因為這一演算法的核心思想就是大量的資料儲存、大量的query查詢。
簡單介紹一下指紋演算法,回到「資料採集與製備」,當手機獲取到 GPS 定位資訊的同時,手機會掃描周圍所有 AP 的 BSSID。這時所有能採集到的 BSSID 序列就成了指紋儲存在資料庫中,指向的是收集到該指紋的座標。當有手機採集的 BSSID 序列能夠匹配之前採集到的指紋(BSSID序列),那麼就可以認為此時的座標正是指紋所指向向的座標。
<img src="https://pic4.zhimg.com/383324b97f24f545031df9a315a1f743_b.jpg" data-rawwidth="424" data-rawheight="209" class="origin_image zh-lightbox-thumb" width="424" data-original="https://pic4.zhimg.com/383324b97f24f545031df9a315a1f743_r.jpg">

指紋演算法也有致命缺點:一是採集量需要非常大。二是對服務端效能和資料儲存要求太高。三是 WIFI 不密集的地方,定位結果會非常糟糕。

最大似然定位法
目前最靠譜的 Wi-Fi 定位演算法。說白了就是三角定位法加入了概率論的因素。感興趣的同學可自己琢磨和研究。


簡單說說Wi-Fi 定位的一些有意思的坑:
跨省定位
:萬萬沒想到,萬萬沒想到,Wi-Fi 定位這件事兒在中國居然可以出現跨省定位這樣的嚴重錯誤。原因就是某家王八蛋路由器生產商根本不遵守一臺裝置一個 BSSID 的原則。資料庫裡這條 BSSID 的座標明明是在大砍省,沒想到大吃省居然有一片路由器用了同一個 BSSID,砍省瞬間變吃省。另外,這家王八蛋生產商名叫騰達,堂堂騰達居然連買MAC地址的錢都沒有,還是請騰達早日滾蛋破產。
移動 Wi-Fi:

你能想到嗎,現在公交車上都各種裝AP啊,公交車帶著 Wi-Fi 滿大街跑,你叫我拿你的 Wi-Fi定個毛位啊!我又怎麼知道你這是公交車上的 Wi-Fi 啊(其實可以^-^)!!
Wi-Fi 集體搬家:唯一能打倒概率論的敵人。玩了 Wi-Fi 定位後,某天你會發現四川某大學所有的校園 AP(移動)全部出現在了西安某大學裡面,數量多達上百個。可憐的西安某大學學生,只能看著地圖上的四川地圖哭啊!你還敢玩兒概率論??(當然還得玩)
高層建築內的 WIFI定位:在高層建築中,手機幾乎不可能連上 GPS,也自然無法採集到 AP 的位置。這個坑也有解,考驗的是研發同學的實現能力和演算法設計能力。

另外,說說為什麼 iPhone 可以在無網狀態下定位@Ts8zs

當iPhone 獲取到WIFI 定位結果後,會在客戶端儲存一份定位結果,比如「(x1,y1),BSSID1,BSSID2。。。BSSIDn」。即便 iPhone 沒有聯網,只要掃描到其中一個 BSSID,iOS 即認為此時的位置是(x1,y1)
PS:不連線 WIFI,手機也可以獲取 WIFI 的 BSSID 和 RSSI。 最後,說一些對 WIFI定位的常見誤區:
一、第三方無法在 iOS 上獲取 RSSI,「至於你們第三方的地圖應用,自己玩泥巴去吧~」

前半句是對的,後半句大錯特錯。蘋果的wifi定位能力和精度是神一般的存在,完爆谷歌和國內任何一個定位團隊。在某些場景下,普通使用者甚至無法察覺現在是 WIFI 定位還是 GPS 定位。
另外,真正玩泥巴的是國內的安卓應用,iOS 應用只要調取蘋果的網路定位 API 即可獲取最高水準的WIFI定位結果。開發者省時省力,使用者也能獲得最好的體驗。
二、「iPhone 在向 Google 提交資料時,總是把所有可能有用的資料同時提交上去,包括 IP、基站編號、Wi-Fi MAC 地址等等,然後 Google 返回儘可能精確的定位資訊」
很難相信說出這話的同學@Cat Chen是位 Facebook 的工程師。只要第三方iOS 應用無法獲取 WIFI 的 RSSI,就無法進行WIFI 定位(指紋演算法也不行,因為 iOS 第三方只能知道當前連線 WIFI 的 BSSID 地址,iOS 7連當前連線的 WIFI BSSID 都無法獲取了。)
事實上非越獄狀態下,iOS 的第三方應用就是無法獲取WIFI 的 RSSI。因此 Google Maps 無法上傳關鍵的定位要素,自然也無法得到自家生產的定位結果。
三、「IP 定位」
難以置信有人會這麼說,就算猜答案也應該有點計算機網路的基礎常識。如果真用 IP 來定位,定位的精度會比基站定位的精度還低。一般 WIFI 定位的精度在500米以內。
四、想用 WIFI 定位,必須連上 WIFI
手機不用連WIFI,也可以掃描得到附近 WIFI的 BSSID和 RSSI。一般在小區樓底開啟地圖的前幾分鐘,都是 WIFI 定位的結果。