iOS一次定位解决方案(基于高德iOS SDK)
部分LBS應(yīng)用,在打開(kāi)app時(shí)獲取當(dāng)前的準(zhǔn)確位置就能滿足要求,一直開(kāi)著定位,不僅會(huì)浪費(fèi)流量也費(fèi)電,所以這里給大家推薦一個(gè)一次定位的解決方法。
步驟如下:
1.開(kāi)啟定位,請(qǐng)求獲取位置信息。(注意:iOS定位需要去請(qǐng)求定位權(quán)限,在info.plist中添加NSLocationWhenInUseUsageDescription或NSLocationAlwaysUsageDescription字段)
2.在定位回調(diào)中對(duì)返回的位置信息做一些處理,保證位置信息的準(zhǔn)確性。
? ?a)位置信息可能有緩存,所以要判斷一下時(shí)間。
? ?b)iOS的定位是越定越準(zhǔn)的(即:進(jìn)回調(diào)的次數(shù)越多,定位的精確度越高),所以要判斷位置的水平精度是否有效。
? ?c)不同的業(yè)務(wù)場(chǎng)景,對(duì)定位的精準(zhǔn)度要求不一樣,比如:在室外叫出租車(chē),希望司機(jī)能準(zhǔn)備的看到我的位置,這時(shí)候需要與當(dāng)前位置偏差越小越好;在辦公室內(nèi)買(mǎi)東西,只要標(biāo)識(shí)出用戶在某個(gè)樓里面就可以了。所以,不同的業(yè)務(wù)場(chǎng)景,我們需要進(jìn)行不同的設(shè)置。
3.通過(guò)上面的三重判斷,終于獲取了我所需要的位置信息,這時(shí)停止定位,懸崖勒馬,再也不用擔(dān)心用戶說(shuō)“你的app怎么這么費(fèi)電了”。
代碼奉上(這段代碼也適用于定位按鈕的功能,點(diǎn)擊一次定位按鈕進(jìn)行一次定位)
#import <ViewController.h>
#import <MAMapKit/MAMapKit.h>
@interface ViewController ()<MAMapViewDelegate>
{
MAMapView *_mapView;
}
@end
- (void)viewDidLoad
{
[super viewDidLoad];
//配置用戶Key
[MAMapServices sharedServices].apiKey = @"用戶Key";
_mapView = [[MAMapView alloc] initWithFrame:CGRectMake(0, 0, CGRectGetWidth(self.view.bounds), CGRectGetHeight(self.view.bounds))];
_mapView.delegate = self;
//開(kāi)啟定位
_mapView.showsUserLocation = YES; //開(kāi)啟定位
}
?
-(void)mapView:(MAMapView *)mapView didUpdateUserLocation:(MAUserLocation *)userLocation
updatingLocation:(BOOL)updatingLocation
{
if(updatingLocation)
{
//取出當(dāng)前位置的坐標(biāo)
CLLocation *newLocation = userLocation.location;
? ? ? ? ? ?//判斷時(shí)間
NSTimeInterval locationAge = -[newLocation.timestamp timeIntervalSinceNow];
if (locationAge > 5.0) {
return;
}
? ? ? ? ? ?
? ? ? ? ? //判斷水平精度是否有效
if (newLocation.horizontalAccuracy < 0) {
return;
}
?
? ? ? ? ?//根據(jù)業(yè)務(wù)需求,進(jìn)行水平精度判斷,獲取所需位置信息(100可改為業(yè)務(wù)所需值)
?if(newLocation.horizontalAccuracy < 100){
//獲取定位位置的經(jīng)緯度
CLLocationCoordinate2D myCoordinate = [newLocation coordinate];
// 緯度
CGFloat latitude = myCoordinate.latitude;
// 經(jīng)度
CGFloat longitude = myCoordinate.longitude;
? ? ? ? ? ? ? ? ?// 做所需的功能
……
? ? ? ? ? ? ? ? ?//停止定位
_mapView.showsUserLocation = NO;
? ? ? ? ? }
}
}
?
注意:_mapView.showsUserLocation = NO停止定位后,定位小藍(lán)點(diǎn)也同時(shí)從mapview上消失,如果想看到你的定位點(diǎn),用獲取的坐標(biāo)加個(gè)annotation即可,加annotation的方法請(qǐng)看這里:http://lbs.amap.com/api/ios-sdk/guide/overlay/#annotation。
?
轉(zhuǎn)載于:https://www.cnblogs.com/jessiemap/p/4381715.html
總結(jié)
以上是生活随笔為你收集整理的iOS一次定位解决方案(基于高德iOS SDK)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: kendo grid输入框验证方法
- 下一篇: DevExpress控件库----Ale