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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值