一需忿、常見定位技術(shù)
1.基站定位
每個手機基站都有一個ID標(biāo)識符诅炉,插上sim卡的手機或其他終端可以搜集周圍所有收到信號的基站和其ID蜡歹,查詢定位服務(wù)器可知基站位置。再通過計算基站信號傳播到終端的角度涕烧、時間和強度等信息月而,就可以確定終端的位置∫榇浚基站定位速度快父款,但準(zhǔn)確度較低,精度為平均200米左右瞻凤,視運營商基站覆蓋范圍而定憨攒。
無網(wǎng)基站定位:傳統(tǒng)的基站定位需要連接云端服務(wù)器,產(chǎn)生網(wǎng)絡(luò)流量阀参,蘋果在iOS 4開始對其進(jìn)行了優(yōu)化肝集,預(yù)先將一些重要基站提前存儲在iOS系統(tǒng)中,在無網(wǎng)情況下蛛壳,不用上網(wǎng)也能通過這些本地基站信息定位到用戶位置杏瞻,但這個誤差范圍更大,在10公里到50公里衙荐。
2.Wi-Fi定位
每一個Wi-Fi熱點都有一個獨一無二的MAC地址捞挥,智能手機等設(shè)備開啟Wi-Fi后就會自動掃描附近熱點并上傳它們的地理位置信息,這樣就建立了一個龐大的熱點位置數(shù)據(jù)庫忧吟。反過來講砌函,如果你的設(shè)備連上了某個Wi-Fi熱點,那么就可以調(diào)用服務(wù)器或離線數(shù)據(jù)中附近所有熱點的地理位置信息瀑罗,而服務(wù)器會參考每個熱點的信號強弱計算出設(shè)備的大致地理位置胸嘴,最后再返回給用戶雏掠。Wi-Fi定位精度為20米左右斩祭。
無網(wǎng)WIFI定位:傳統(tǒng)的WIFI定位需要網(wǎng)絡(luò),但是iOS對其進(jìn)行了優(yōu)化乡话,在設(shè)備有網(wǎng)絡(luò)連接時摧玫,會大致定位出設(shè)備的位置,并自動下載所在地區(qū)周圍(幾個街區(qū)寬度或者更多)所有的WIFI熱點的信息到本地绑青。之后诬像,當(dāng)設(shè)備在周圍移動并進(jìn)行WIFI定位的時候,即使沒有網(wǎng)絡(luò)闸婴,iOS照樣可以利用之前下載的WIFI熱點信息定位出設(shè)備的位置坏挠。
3.GPS定位
GPS定位需要GPS硬件支持,直接和衛(wèi)星交互來獲取當(dāng)前經(jīng)緯度與準(zhǔn)確時間邪乍。接收機在戶外接收到天上的定位衛(wèi)星發(fā)射出來的信號降狠,得到衛(wèi)星的位置对竣,推算出接收機到每顆衛(wèi)星的距離,進(jìn)而推算出手機的位置榜配。通過GPS方式定位準(zhǔn)確度是最高的(10米左右否纬,取決于芯片),但是從GPS模塊啟動到獲取第一次定位數(shù)據(jù)(冷啟動)蛋褥,可能需要比較長的時間临燃,并且GPS模塊耗電量大,且在室內(nèi)幾乎無法使用烙心。
4.AGPS定位(Assisted?GPS)
AGPS利用網(wǎng)絡(luò)膜廊,首先將基站定位或者WIFI定位獲得的大概位置發(fā)到遠(yuǎn)程服務(wù)器,有服務(wù)器進(jìn)行查詢和計算淫茵,得出這個位置下當(dāng)前衛(wèi)星信息溃论,反饋給設(shè)備,設(shè)備就可以直接用這些信息來接受衛(wèi)星信號痘昌,不用等待漫長的衛(wèi)星軌道信息廣播完畢后钥勋,才能知道衛(wèi)星的位置,大大縮短搜星時間辆苔。GPS解決方案的優(yōu)勢主要體現(xiàn)在其定位精度上算灸,在室外等空曠地區(qū),其精度在正常的GPS工作環(huán)境下驻啤,可以達(dá)到10米左右菲驴,堪稱目前定位精度最高的一種定位技術(shù)。該技術(shù)的另一優(yōu)點為:首次捕獲GPS信號的時間一般僅需幾秒骑冗,不像GPS的首次捕獲時間可能要2~3分鐘赊瞬。
二、iOS與Android的定位實現(xiàn)
1.iOS的定位實現(xiàn)
iOS定位使用都是Core Location框架贼涩,然后用CLLocationManager類來實現(xiàn)定位巧涧,系統(tǒng)會自動分配使用哪種定位方式,并且還會有緩存遥倦。
iOS設(shè)備能提供3種不同途徑進(jìn)行定位:Wi-Fi谤绳、蜂窩式移動電話基站、GPS衛(wèi)星(包括AGPS)袒哥。
iOS不像Android系統(tǒng)在定位服務(wù)編程時缩筛,可以指定采用哪種途徑進(jìn)行定位。iOS的API把底層這些細(xì)節(jié)屏蔽掉了堡称,開發(fā)人員和用戶并不知道現(xiàn)在設(shè)備是采用哪種方式進(jìn)行定位的瞎抛,iOS系統(tǒng)會根據(jù)設(shè)備的情況和周圍的環(huán)境,采用一套最佳的解決方案却紧。如果能夠接收GPS信息桐臊,那么設(shè)備優(yōu)先采用GPS定位钞艇,否則采用Wi-Fi或蜂窩基站定位。在Wi-Fi和蜂窩基站之間優(yōu)先使用Wi-Fi豪硅,如果無法連接Wi-Fi才使用蜂窩基站定位哩照。
2.Android的定位實現(xiàn)
Android系統(tǒng)API提供基站ID和WIFI的mac地址獲取接口,開發(fā)者自行維護(hù)基站懒浮、mac數(shù)據(jù)庫飘弧,自行查詢推算位置。而GPS定位信息則可以直接調(diào)用系統(tǒng)API獲得砚著。
除了自行維護(hù)數(shù)據(jù)庫之外次伶,也可以使用百度、高德等地圖廠商自行實現(xiàn)的定位SDK稽穆。該定位SDK的作用就是通過系統(tǒng)接口讀取到原始定位信息冠王,然后借助于各家自行部署維護(hù)的數(shù)據(jù)庫,查詢到當(dāng)前掃描到的基站舌镶、WIFI的位置柱彻,最終計算出更準(zhǔn)確的定位結(jié)果,通過SDK的接口餐胀,返回給開發(fā)者哟楷。
在中國,Google服務(wù)器不可用否灾,這會造成一定的問題卖擅。一個app如果只是調(diào)用系統(tǒng)定位接口,那么在行貨手機墨技,由于手機廠商已經(jīng)把定位的網(wǎng)絡(luò)服務(wù)器重定向為國內(nèi)定位服務(wù)商惩阶,所以肯定可以定位,但是在水貨手機上因為系統(tǒng)底層是直接連google服務(wù)器的扣汪,就會無法定位断楷。為了保證app在所有手機上都可以定位,開發(fā)者就會不得不使用第三方的獨立定位SDK私痹。
三脐嫂、坐標(biāo)信息
1.坐標(biāo)偏移
WGS84是GPS全球定位系統(tǒng)使用的坐標(biāo)系統(tǒng),GPS設(shè)備直接返回的坐標(biāo)即為WGS84紊遵。GCJ02則是由中國國家測繪局制定的地理信息系統(tǒng)的坐標(biāo),也叫“火星坐標(biāo)”侥蒙,國內(nèi)出版的各種地圖坐標(biāo)系統(tǒng)(包括電子地圖)暗膜,必須至少采用GCJ02對WGS84進(jìn)行首次加密。高德和搜狗等使用GCJ02鞭衩,百度地圖會再加密一層学搜,編碼系統(tǒng)叫BD09娃善。
iOS系統(tǒng)上通過定位服務(wù)CLLocation相關(guān)接口獲取定位信息時,獲取的經(jīng)緯度坐標(biāo)系是WGS84地球坐標(biāo)瑞佩,如果直接將該坐標(biāo)系在iOS系統(tǒng)地圖中打點聚磺,會發(fā)現(xiàn)存在偏移,因為iOS系統(tǒng)地圖查看國內(nèi)時使用的是高德地圖數(shù)據(jù)炬丸,因此只接受GCJ02火星坐標(biāo)瘫寝。如果在國內(nèi)iOS系統(tǒng)地圖中獲取當(dāng)前位置,那么獲取到的坐標(biāo)系是GCJ02火星坐標(biāo)系稠炬。
Android系統(tǒng)上通常使用高德或者百度定位SDK獲取定位信息焕阿。高德SDK沒有坐標(biāo)系參數(shù)設(shè)定,在大陸和港澳地區(qū)獲取的坐標(biāo)系即為GCJ02坐標(biāo)系首启,在臺灣和海外地區(qū)都是WGS84坐標(biāo)系暮屡;百度SDK可以自行設(shè)定坐標(biāo)系參數(shù),即返回WGS84坐標(biāo)系毅桃,還是GCJ02坐標(biāo)系或者BD09坐標(biāo)系(注意BD09坐標(biāo)系只適用于百度地圖)褒纲,如果設(shè)定的是GCJ02坐標(biāo)系,它在大陸+港澳臺地區(qū)獲取的坐標(biāo)系都是GCJ02坐標(biāo)系钥飞。如果沒有調(diào)用第三方地圖API外厂,而是使用android.location獲取的經(jīng)緯度,或者是通過手持或車載的GPS終端獲取的經(jīng)緯度,那就是屬于WGS84的真實的地理坐標(biāo)代承,這時候汁蝶,直接在百度或者高德地圖上顯示是會出現(xiàn)偏移的。
因此论悴,若想獲取到準(zhǔn)確的坐標(biāo)位置掖棉,需要對從設(shè)備獲取的坐標(biāo)信息進(jìn)行修正。
2.坐標(biāo)信息
從設(shè)備獲取到的定位信息統(tǒng)一格式:經(jīng)度在前膀估,維度在后幔亥,經(jīng)緯度間以“,”分隔,經(jīng)緯度小數(shù)點后精確到6位數(shù)察纯。
坐標(biāo)轉(zhuǎn)換代碼:https://github.com/googollee/eviltransform
——部分內(nèi)容整理自網(wǎng)絡(luò)——