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