移動網際網路時代,手機成了每個人的生活標配。這些手機裡,安裝了形形色色的APP,提供了各種服務,徹底改變了我們的生活,這些服務裡面,就包括我們今天的主角 "定位"。
"定位"這個技術大家應該都有使用過,例如很多人都給孩子或者年邁的老人安裝上手機定位軟體,防止老人和孩子走失,或者手機"叫車服務"、"外賣服務""導航服務"都會應用到"定位"技術。這項技術給很多應用服務提供著輔助支撐。
還有些人會僱傭黑客利用"定位"技術對相關人進行跟蹤定位,侵犯他人隱私!那麼這項技術的原理到底是什麼?如何利用該技術快速定位他人位置?
今天我們就以本篇文章內容給大家詳細闡述一下"手機定位的原理與實現"!
一、 手機到底如何實現定位的?工作原理是什麼?1、常用定位技術
現在使用規模較大的定位技術有6種,我分成了兩大類
衛星定位:包括GPS、AGPS、Glonass、北鬥。
地面輔助定位:包括基站定位、WiFi輔助定位。
2、常見的定位技術原理
(一)衛星定位
常見的衛星定位系統有GPS、北鬥、伽利略和Glonass,雖然這些系統提供的服務有些差異,但其背後的定位原理都是相同,現在以應用最廣泛的GPS為例來介紹衛星定位。
GPS(Global Positioning System)即全球定位系統,是由美國建立的一個衛星導航定位系統,利用該系統,用戶可以在全球範圍內實現全天候、連續、實時的三維導航定位和測速;另外,利用該系統,用戶還能夠進行高精度的時間傳遞和高精度的精密定位。
1.1GPS系統構成
GPS系統包括三大部分:空間部分--GPS衛星星座;地面控制部分--地面監控部分;用戶設備部分--GPS信號接收機。如圖1:
1.1.1GPS工作衛星及其星座
21顆工作衛星和3顆在軌備用衛星組成GPS衛星星座。24顆衛星距地高度為20200km,運行周期為11小時58分(恆星時12小時),均勻分布在6個軌道平面內,軌道傾角為55度,各個軌道平面之間相距60度,每個軌道平面內各顆衛星之間相差90度。衛星通過天頂時,衛星可見時間為5個小時,在地球表面上任何地點任何時刻,在高度角15度以上,平均可同時觀測到6顆衛星,最多可達9顆衛星。示例如圖2:
為了解算測站的三維坐標,必須觀測4顆GPS衛星,稱為定位星座。
1.1.2地面監控系統
對於導航定位來說,GPS衛星是一動態已知點。星的位置是依據衛星發射的星曆--描述衛星運動及其軌道的參數算得的。每顆GPS衛星所播發的星曆,是由地面監控系統提供的。衛星上的各種設備是否正常工作,以及衛星是否一直沿著預定軌道運行,都要由地面設備進行監測和控制。地面監控系統另一個重要作用是保持各顆衛星的時間,求出鐘差,然後由地面注入站發給衛星,衛星再由導航電文發給用戶設備。
GPS工作衛星的地面監控系統包括一個主控站、三個注入站和五個監測站。主控站的作用是根據各監控站對GPS的觀測數據,計算出衛星的星曆和衛星鐘的改正參數等,並將這些數據通過注入站注入到衛星中去;同時,它還對衛星進行控制,向衛星發布指令,當工作衛星出現故障時,調度備用衛星,替代失效的工作衛星工作;另外,主控站也具有監控站的功能;監控站主要任務是為主控站提供衛星的觀測數據;注入站任務是將主控站發來的導航電文注入到相應衛星的存儲器。
1.1.3GPS信號接收機
能夠捕獲到按一定衛星高度截止角所選擇的待測衛星的信號,並跟蹤這些衛星的運行,對所接收到的GPS信號進行變換、放大和處理,以便測量出GPS信號從衛星到接收機天線的傳播時間,解譯出GPS衛星所發送的導航電文,實時地計算出測站的三維位置,甚至三維速度和時間。
1.2GPS定位原理
GPS導航系統的基本原理是測量出已知位置的衛星到用戶接收機之間的距離,然後綜合多顆衛星的數據就可知道接收機的具體位置。要達到這一目的,衛星的位置可以根據星載時鐘所記錄的時間在衛星星曆中查出。而用戶到衛星的距離則通過紀錄衛星信號傳播到用戶所經歷的時間,再將其乘以光速得到(由於大氣層電離層的幹擾,這一距離並不是用戶與衛星之間的真實距離,而是偽距)。
當GPS衛星正常工作時,會不斷地用1和0二進位碼元組成的偽隨機碼(簡稱偽碼)發射導航電文。導航電文包括衛星星曆、工作狀況、時鐘改正、電離層時延修正、大氣折射修正等信息。GPS導航系統衛星部分的作用就是不斷地發射導航電文。然而,由於用戶接受機使用的時鐘與衛星星載時鐘不可能總是同步,所以除了用戶的三維坐標x、y、z外,還要引進一個變量 t 即衛星與接收機之間的時間差作為未知數,然後用4個方程將這4個未知數解出來。所以如果想知道接收機所處的位置,至少要能接收到4個衛星的信號。如下圖所示:
從以上四個方程中解出x,y,z和t就可以定時、定位。
GPS定位方式,不需要sim卡,不需要連接網絡,只要在戶外,基本上隨時隨地都可以準確定位。其他類型衛星定位方式與GPS差不多,不再講述。
(二)基站定位
基站定位,也就是常說的LBS,Location Based Service(基於位置服務)。
2.1相關概念
因為處在相同頻率範圍的信號會相互幹擾,為防止相鄰基站相互幹擾,相鄰的基站會選擇不同的信道(不同頻率範圍的信號)與行動裝置通信。如上圖是一個蜂窩移動基站的示意圖,其任意相鄰的兩個基站都具有不同的通信頻段。基站不是孤立存在的,其覆蓋區域相互交接,組成一張巨大的移動通信網絡(如下圖)。
行動裝置在插入sim卡開機以後,會主動搜索周圍的基站信息,與基站建立聯繫,而且在可以搜索到信號的區域,手機能搜索到的基站不止一個,只不過遠近程度不同,再進行通信時會選取距離最近、信號最強的基站作為通信基站。其餘的基站並不是沒有用處了,當你的位置發生移動時,不同基站的信號強度會發生變化,如果基站A的信號不如基站B了,手機為了防止突然間中斷連結,會先和基站B進行通信,協調好通信方式之後就會從A切換到B。這也就是為什麼同樣是待機一天,你在火車上比在家裡耗電要多的原因,手機需要不停的搜索、連接基站。每次坐火車,我都會把手機調成飛行模式,看看電影、聽聽歌,依然可以維持很長時間。
如上圖所示,在這張巨大行動網路中,根據你所在的小區,所從屬的基站就可大致知道你的位置信息,如果再加上一些估計算法,就可以更確切的找出你的位置。
2.2基站定位原理
行動電話測量不同基站的下行導頻信號,得到不同基站下行導頻的TOA(到達時刻)或 TDOA(到達時間差),根據該測量結果並結合基站的坐標,一般採用三角公式估計算法,就能夠計算出行動電話的位置。實際的位置估計算法需要考慮多基站(3個或3個以上)定位的情況,因此算法要複雜很多。一般而言,移動臺測量的基站數目越多,測量精度越高,定位性能改善越明顯。
上面的介紹有點官方,不是很容易理解。直白的說,距離基站越遠,信號越差,根據手機收到的信號強度可以大致估計距離基站的遠近,當手機同時搜索到至少三個基站的信號時(現在的網絡覆蓋這是很輕鬆的一件事情),大致可以估計出距離基站的遠近;基站在行動網路中是唯一確定的,其地理位置也是唯一的,也就可以得到三個基站(三個點)距離手機的距離,根據三點定位原理,只需要以基站為圓心,距離為半徑多次畫圓即可,這些圓的交點就是手機的位置。網傳的微信三點定位原理也是這個樣子。
由於基站定位時,信號很容易受到幹擾,所以先天就決定了它定位的不準確性,精度大約在150米左右,基本無法開車導航。定位條件是必須在有基站信號的位置,手機處於sim卡註冊狀態(飛行模式下開wifi和拔出sim卡都不行),而且必須收到3個基站的信號,無論是否在室內。但是,定位速度超快,一旦有信號就可以定位,目前主要用途是沒有GPS且沒有wifi的情況下快速大體了解下你的位置。另外,如果你的手機裡沒有基站位置數據包,還需要聯網才行。
(三) Wi-Fi定位
除了基站定位之外,還有一個大家可能比較陌生的地面定位方式,就是Wi-Fi定位。
沒錯,Wi-Fi也可以定位喲!
也許你會認為,我所說的Wi-Fi定位,就是IP地位定位。其實並不是哦!
大家都知道,每個人上網,都會有一個公網IP位址。這些IP地位,在網絡系統中都是有註冊的,例如屬於南京電信或上海聯通,之類的。
IP位址確實可以大致追蹤到你的位置(運營商可以查得更準確),但是,這種定位也有局限性。一方面,現在很多運營商都採用NAT技術,不一定會給每個用戶分配公網地址,另一方面, IP位址很容易欺騙,我如果搞一個代理地址,你看到的IP,可能是美國的。
我所說的Wi-Fi定位,和上面的IP位址定位完全不同,是根據Wi-Fi路由器MAC地址進行定位。
每一個無線AP(Wi-Fi路由器)都有一個全球唯一的MAC地址,並且一般來說,無線AP在一段時間內不會移動。
在開啟Wi-Fi的情況下,採集設備(例如手機)可以搜到這個無線AP的信號,並且獲取它的MAC地址和信號強度信息。
採集裝置將這些信息上傳到伺服器,經過伺服器的計算,保存為"MAC-經緯度"的映射。當採集的信息足夠多,就在伺服器上建立了一張巨大的Wi-Fi信息資料庫。
當一個設備處在這樣的網絡中時,可以將收集到的這些能夠標示AP的數據發送到位置伺服器,伺服器檢索出每一個AP的地理位置,並結合每個信號的強弱程度,計算出設備的地理位置並返回到用戶設備,其計算方式和基站定位位置計算方式相似,也是利用三點定位或多點定位技術。
位置服務商要不斷更新、補充自己的資料庫,以保證數據的準確性。
那麼,問題來了,這些AP位置映射數據怎麼採集的呢?
大致可以分為兩種——主動採集和用戶提交。
· 主動採集:
谷歌的街景拍攝車,沒想到吧?它就是一個採集設備。它採集沿途的無線信號並打上通過GPS定位出的坐標回傳至伺服器。
· 用戶提交:
Android手機用戶在開啟"使用無線網絡定位"時,會提示是否允許使用Google的定位服務,如果允許,用戶的位置信息就被谷歌收集到。iPhone則會自動收集Wi-Fi的MAC地址、GPS位置信息、運營商基站編碼等,並發送給蘋果公司的伺服器。
和基站定位一樣,Wi-Fi定位在AP密集的地方有很好的效果。如果AP很少,那也很難定位準確。
總的來說,Wi-Fi這種定位方式的執行難度比較大,可用性和準確性也不高。所以,主要還是一種輔助性質的定位手段。
(四)、A-GPS定位
說到輔助,我們就要說到A-GPS了。
A-GPS,Assisted GPS,輔助全球衛星定位系統。從名字就可以看出來,這是GPS的一個增強功能。
AGPS(AssistedGPS:輔助全球衛星定位系統)是結合GSM/GPRS與傳統衛星定位,利用基地臺代送輔助衛星信息,以縮減GPS晶片獲取衛星信號的延遲時間,受遮蓋的室內也能借基地臺訊號彌補,減輕GPS晶片對衛星的依賴度。AGPS利用手機基站的信號,輔以連接遠程定位伺服器的方式下載衛星星曆 (英語:Almanac Data),再配合傳統的GPS衛星接受器,讓定位的速度更快。是一種結合網絡基站信息和GPS信息對移動臺進行定位的技術,既利用全球衛星定位系統GPS,又利用移動基站,解決了GPS覆蓋的問題,可以在2代的G、C網絡和3G網絡中使用。
普通的GPS系統是由GPS衛星和GPS接受器組成,與普通的GPS不同,AGPS在系統中還有一個輔助定位伺服器。在AGPS網絡中,接收器可通過與輔助伺服器的通信而獲得定位輔助。由於AGPS接收器與輔助伺服器間的任務是互為分工的,所以AGPS往往比普通的GPS系統有速度更快的定位能力、有更高的效率,可以很快捕捉到GPS信號,這樣的首次捕獲時間將大大減小,一般僅需幾秒的時間(單純GPS接收機首次捕獲時間可能要2~3分鐘時間),而精度也僅為幾米,高於GPS的精度。 利用AGPS接收器不必再下載和解碼來自GPS衛星的導航數據,因此可以有更多的時間和處理能力來跟蹤GPS信號,這樣能降低首次定位時間,增加靈敏度以及具有最大的可用性。
AGPS定位基本步驟
· AGPS手機首先將本身的基站地址信息通過網絡傳輸到定位伺服器;
· 定位伺服器根據該手機的大概位置傳輸與該位置相關的GPS輔助信息(包含GPS的星曆和方位俯仰角等)到手機;
· 該手機的AGPS模塊根據輔助信息(以提升GPS信號的第一鎖定時間TTFF能力)接收GPS原始信號;
· 手機在接收到GPS原始信號後解調信號,計算手機到衛星的偽距(偽距為受各種GPS誤差影響的距離),並將有關信息通過網絡傳輸到定位伺服器;
· 定位伺服器根據傳來的GPS偽距信息和來自其他定位設備(如差分GPS基準站等)的輔助信息完成對GPS信息的處理,並估算該手機的位置;
· 定位伺服器將該手機的位置通過網絡傳輸到定位網關或應用平臺(如手機上的GPS應用程式)。
AGPS的優勢主要在其定位精度上。在室外等空曠地區,其精度在正常的GPS工作環境下,可達10米左右,堪稱目前定位精度最高的一種定位技術。另一優點為:首次捕獲GPS信號的時間一般僅需幾秒,不像GPS的首次捕獲時間可能要2~3分鐘。雖然AGPS技術的定位精度很高、首次捕獲GPS信號時間短,但是該技術也存在著一些缺點。首先,室內定位的問題目前仍然無法圓滿解決。另外,AGPS的定位實現必須通過多次網絡傳輸(最多可達六次單向傳輸),這對運營商來說是被認為大量的佔用了空中資源,對消費者而言將產生不少的流量費用。而且AGPS手機比一般手機在耗電上有一定的額外負擔,間接減短了手機的待機時間。除此之外,有時無法取得多個衛星傳來的訊號,通常這是因為您的AGPS 話機天線接收器所在環境的限制。在這種情況下,AGPS 功能將不能很好地使用。
二、 開發者是如何實現手機定位的?了解了這些定位方式的"開發者實現方式",開發者恐怕要渾身冒汗了,千千萬萬的app難道都如上述說的,"自行維護基站、WIFI資料庫"嗎?
答案:當然是否定的,在實際的工程實踐中,主流的做法是兩種:
手段之一:調用系統級定位能力
無論哪個系統(IOS、安卓、WP)都提供了一套系統級定位能力,這樣的定位能力,對應著是一套系統級API,這個API一般來說,總是會有如下幾個精度的選項:
高精度:能搜到GPS衛星,則使用GPS定位,否則,則使用WIFI定位,如果WIFI和GPS都無法定位成功,只能根據基站來給出定位結果了。
平衡功耗:禁用GPS(因為它非常耗電),優先使用WIFI,如果WIFI不可用,則用基站來進行定位。
低功耗(被動定位):根據不同系統的規定,實現方式也不同,但大體上都是共享其他app的定位結果,即其他app以高精度、平衡功耗的方式得到位置,那麼這個位置也一併推送給當前使用"低功耗定位"的app,也就是該app不消耗額外的能耗,就完成了定位。
當然,這種系統級定位能力是有著軟肋的,軟肋在於以下兩點
在基站、WIFI定位能力上,系統定位能力取決於系統自己在這方面投入數據收集推算的能力,這個是參差不齊的。舉個簡單的例子,百度和高德在中國採集了成百上千個公共場所的室內定位信息,使之能達到米級的室內定位,蘋果做了嗎?谷歌做了嗎?微軟做了嗎?他們怎麼和國內的服務商拼效果?居然還有人說蘋果定位和谷歌地圖在國內定位準,我真是醉了。
在中國,google的服務不可用,考慮到基站、WIFI定位必須連接服務端發請求,因而Android的系統級定位能力的可用性也會有很大的影響,至少那些"水貨"手機,在中國基本就沒法調用系統定位服務了,而行貨手機,相應的廠商會改造這個API接口的實現,使得其重定向為請求國內某些定位服務商,從而使得這個接口重新變得可用(對開發者來說,他並不需要知道這個API是如何實現的)。
但是,我們不得不承認,在IOS和WP系統上,因為OS沒有開放出讀取基站和WIFI的接口,因此實際上作業系統的定位能力已經形成了壟斷,開發者也就無法實現自主的定位能力。這也會導致在蘋果和WP手機上,所有的app在同一時刻的定位誤差,都是一樣的。
手段之二:調用第三方定位SDK
對於可以公開讀取基站、WIFI信息的Android手機系統,國內的百度、高德等地圖廠商自行實現了定位SDK,該定位SDK的作用就是通過系統接口讀取到原始定位信息,然後藉助於各家自行部署維護的資料庫,查詢到當前掃描到的基站、WIFI的位置,最終計算出更準確的定位結果,通過SDK的接口,返回給開發者。這麼做的好處,在於能夠讓app的定位能力脫離對手機系統的依賴。
舉個例子,一個app他如果只是調用系統定位接口,那麼在行貨手機,由於手機廠商已經把定位的網絡伺服器重定向為國內定位服務商,所以肯定可以定位,但是在水貨手機上因為系統底層是直接連google伺服器的,就會無法定位。但用戶就是上帝,出現了這個事情在用戶看來,就是不能接受的,為了保證app在所有手機上都可以定位,開發者就會不得不使用第三方的獨立定位SDK。
三、 如何定位別人的手機位置?註:定位別人手機位置會涉及到隱私的問題,所以學習會方法只建議用於定位年邁老人和孩子行蹤確保老人和孩子安全之用,不可以用於非法活動!
1、常規方法
當前大部分手機品牌的定製系統都會自帶手機查找功能,如iPhone、魅族、華為等品牌均有自帶,而其他個別手機品牌如果沒自帶手機查找功能卻又想定位手機,就只有通過安裝第三方APP來實現。通過第三方APP自帶的手機定位功能,可以輕鬆定位別人手機位置。具體常規軟體不多做贅述,大家可以試著用360手機衛士,使用手機防盜功能就可以實現定位!或者利用百度雲中的手機找回功能也可以實現定位!
2、特殊方法
1、通過微信、QQ等即時聊天工具獲取對方位置
這種方式是在微信中通過系統,發送偽裝的文章或紅包,通過文章或紅包獲取對方位置。這種方式需要聊天的對方,打開文章或領取紅包,這樣對方的位置就獲取到了。具體方法會在我的付費專欄裡給大家視頻講解!
2、通過木馬程序植入獲取手機權限實現定位
這種方式獲取對方手機的權限很多,不光能獲取到位置,還有通話、簡訊、微信記錄都可以。