其實扼仲,對于蘋果用戶而言远寸,定位的方案只有一種,那就蘋果自己的定位服務(wù)CoreLocation屠凶,因為蘋果定位不允許接入第三方驰后,百度地圖和高德地圖只是對蘋果定位服務(wù)的二次封裝,方便我們使用矗愧。
1.定位方式和定位原理
移動端定位就是三種:基站定位灶芝、WiFi定位、GPS定位唉韭。其實無論哪種定位监署,都是根據(jù)已知點位置信息來定位當(dāng)前位置,原理都是一樣的纽哥,只是精度、定位速度和耗電的差別栖秕。第一代iPhone只支持基站定位春塌,從iPhone3G開始支持GPS定位,準(zhǔn)確點說是AGPS簇捍,是GPS的加強版只壳。
??基站定位的特點就是速度快,誤差太大了暑塑,在幾百米到幾公里之間吼句。如果手機沒連WiFi,初次定位返回的位置信息基本上都是基站定位事格。因為每個基站都有唯一標(biāo)識符惕艳,蘋果手機可以收集到附近所有基站和他們的標(biāo)識符,把這些信息傳給蘋果云端服務(wù)器驹愚,返回給手機远搪,所以這種定位方式需要網(wǎng)絡(luò)。另外蘋果針對這個做了優(yōu)化逢捺,蘋果手機提前將一些重要的基站信息存儲在本地谁鳍,以便支持無網(wǎng)定位,當(dāng)然精度肯定不能保證了劫瞳,完全看你所在的區(qū)域蘋果是否存儲基站了倘潜。雖然這個很方便,但是對我們這個項目就很坑了志于。我們的App需要室內(nèi)的定位精度非常高涮因,使用聯(lián)通、電信卡的用戶有些時候信號不好(是信號不好恨憎,不是沒有)蕊退,蘋果自動執(zhí)行無網(wǎng)定位郊楣,定位出來的坐標(biāo)誤差特別大, 能達到一兩公里瓤荔,而且我們還沒有辦法自己改變定位方式净蚤,這就比較坑了。
WiFi定位和基站定位原理是相同的输硝,蘋果手機可以獲得周圍路由器或者AP的Mac地址今瀑,然后去蘋果的后臺根據(jù)Mac地址查詢路由器或者AP信息,通過計算得出當(dāng)前位置点把,返回給用戶橘荠,這說明了你的路由器或者AP的信息是存儲在蘋果后臺的,他們每天都收集這些信息郎逃。這個最早是由Skyhook公司發(fā)明的哥童,一開始蘋果也用他們的服務(wù),后來開始自己干了褒翰。WiFi定位速度很快贮懈,耗電介于基站定位和GPS之前,定位幾十米优训,很靠譜朵你。而且蘋果做了優(yōu)化,等你連了一個WiFi熱點之后揣非,蘋果會把周圍的熱點信息都下載下來抡医,至于下載熱點的范圍就看你周圍熱點密集度了,如果在市內(nèi)也就下載一條街的早敬,去熱點不密集的地方忌傻,范圍就會大一點。這有什么用搁嗓?用處大了芯勘。只要用戶打開WiFi,即使不連腺逛,也會提高定位精度荷愕,但是這有一個前提,就是用戶的手機在附近上過網(wǎng)棍矛,手機里已經(jīng)存儲了周圍WiFi的信息安疗。
??GPS定位是蘋果最后支持的,定位精度肯定是最高了够委,我自己測試了一下應(yīng)該在5米以內(nèi)荐类,但是耗時最長,耗電最厲害茁帽,需要聯(lián)網(wǎng)玉罐,需要在室外屈嗤。蘋果是先利用WiFi定位或者基站定位得出一個大概位置信息,上傳蘋果服務(wù)器吊输,蘋果服務(wù)器獲根據(jù)這個位置反饋給手機周圍衛(wèi)星的信息饶号,手機在算出自己的位置。這是蘋果的優(yōu)化季蚂,如果不是這樣茫船,就需要手機自己去掃描分析周圍衛(wèi)星信息了,可能需要10幾分鐘扭屁,現(xiàn)在只要1-2秒了算谈。
2.高德地圖的多次定位
即使執(zhí)行了停止定位的方法:
- (void)stopUpdatingLocation;
高德地圖仍然會繼續(xù)定位,一般會定位4次料滥。他先給返回一個大致的位置然眼,之后再進行校正,所以后面返回的坐標(biāo)精度比前面的高葵腹。如果你只想讓他定位一次罪治,可以自己做一個標(biāo)記,定位過了就不要走代理方法礁蔗。
- (void)amapLocationManager:(AMapLocationManager *)manager didUpdateLocation:(CLLocation *)location {
if (_isFirst) {
return;
}
_isFirst = YES;
[self.locationManager stopUpdatingLocation];
}
如果需要很高的精度就不需要管它,只需執(zhí)行停止定位的方法雁社,讓高德地圖進行反復(fù)校驗浴井。這四次定位時間間隔很短,就是瞬間的事情霉撵。說瞬間有點不專業(yè)了磺浙,小伙伴們可以自己去測一下,我只能保證沒超過1分鐘徒坡。
[CLLocationManager locationServicesEnabled]
注意:這個方法是用來判斷用戶是否打開了導(dǎo)航撕氧,或者導(dǎo)航否可用,檢測的是硬件信息喇完。iOS調(diào)用系統(tǒng)功能之前伦泥,例如照相、錄音等锦溪,都會檢測一下硬件信息不脯,是否這個功能可用。
3.地圖定位的原理
地圖定位其實就是三邊測量定位刻诊,已知三個點的坐標(biāo)防楷,和未知點到這三個點的距離,求未知點的坐標(biāo)则涯。下面的圖片引用自Trilateration三邊測量定位算法复局。
已知(x1,y1),(x2,y2),(x3,y3),和三個圓的半徑冲簿,求(x0,y0)亿昏。但實際情況是三個圓往往不能相交于一個點峦剔,因為三個圓的半徑有誤差,所以最后得到的是一個圓龙优,而不是點羊异,那個圓的半徑其實就是精度。為了增加精度彤断,也就是縮小圓的半徑野舶,我們需要更多的已知點和未知點到已知點的距離,來相互校驗宰衙。天上的導(dǎo)航衛(wèi)星就是已知點平道,GPS有21顆,備用三顆供炼。
??現(xiàn)在科技非常發(fā)達一屋, GPS精度非常高,軍用GPS精度都在1m以內(nèi)袋哼,冀墨,據(jù)說是0.3m,真是太恐怖了涛贯。不過室內(nèi)定位的精度就一般了诽嘉,現(xiàn)在很多項目都是受限于室內(nèi)定位精度不準(zhǔn)而發(fā)展緩慢。