部分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)相关推荐

  1. 基于高德地图SDK实现跑步路线踩点

    前言   现在市面上有很多跑步的app,主要的功能大致是记录你的跑步路线以及你的跑步状况,速度距离等,大多是使用了高德地图,百度地图之类的SDK.   之前学校里有一款课外体育考勤的跑步APP,叫运动 ...

  2. IOS将GPS定位经纬度转换为高德地图经纬度

    https://github.com/JackZhouCn/JZLocationConverter http://www.eoeandroid.com/forum.php?mod=viewthread ...

  3. HTML5 新特性 - 地理定位(基于高德地图API)

    定位的基础与原理 IP定位 运营商基站定位 GPS定位 地理定位的实现 地理定位API允许用户向web应用程序提供他们的位置(经纬度).但是这个操作需要用户授权. 获取地理定位的相关代码如下: let ...

  4. 基于高德地图SDK开发之地图显式

    显示高德地图 1..Framlayout帧布局 直接在屏幕上开辟出一块空白区域,添加的所有组件都放置在区域左上角. 大小由最大子控件决定. 前景图像:永远处于帧布局最顶的,直接面对用户的图像(不会被覆 ...

  5. 【iOS】—— 高德地图SDK基础使用

    最近稍微学了学iOS调用高德的SDK,就随便做做笔记.注意:本篇博客基于高德地图SDK的3D地图来写的,若使用的是2D地图可能有的方法可能有所不同,比如自定义定位蓝点之类的. 一.准备工作: 具体的准 ...

  6. Android基于高德SDK的开发——自定义地图主题样式(悬浮按钮+底部弹窗)

    日常的地图使用中,平台一般只会给我们提供地图的标准样式,造成了一定程度上的审美疲劳,那么如何实现地图的自定义样式呢?本文使用Android Studio 4.1,给开发者提供了一个基于高德地图SDK进 ...

  7. ios 持续获取定位 高德地图_概述-iOS 定位SDK | 高德地图API

    简介 高德 iOS 定位 SDK 提供了不依赖于地图定位的定位功能,开发者可以无地图显示的场景中便捷地为应用程序添加定位功能. iOS定位SDK提供了单次定位.连续定位.逆地理信息.地理围栏等功能. ...

  8. 关于微信H5高德iOS定位失败的解决办法

    在微信浏览器环境内   安卓一切正常 IOS却显示定位失败. 网上查找, 原来前辈们已经有解决方案  : 将定位功能提前至项目启动时调用. 这有这样才能唤起iOS的定位权限.  至于为何,有待探索

  9. 高德h5定位误差_#高德地图api移动端定位失败解决方案 #H5 原生Geollocation接口Chomre浏览器的坑...

    侧重:本文探索了 http 协议下,pc + 移动端定位解决方案 IOS版本: ios14 原生Geolocation 接口: Document Show my location function g ...

最新文章

  1. 如何在StackOverflow上获得第一个标签徽章-以及为什么它很重要。
  2. python pymysql
  3. python htmltestrunner报告_Python HTMLTestRunner可视化报告实现过程解析
  4. 长春工业大学计算机专科吧,长春工业大学是几本 学生评价怎么样好不好(10条)...
  5. 模板方法及策略设计模式实践
  6. Linux apt-get命令
  7. CentOS 查看系统版本号
  8. matlab调制函数,matlab用于数字调制,几个函数的使用问题
  9. POJ 1200 Crazy Search(RK)
  10. STM32F103按键操作的另一种实现——状态机
  11. 大数据时代下的信息安全
  12. java setenabled不好用,哪个更好,setEnabled或setUserInteractionEnabled?
  13. C++ 把引用作为函数参数
  14. python地区房价数据分析_数据分析——房价分析
  15. javascript指定日期增加自然月份(有闰年2月判断)
  16. 网吧用计算机性能配件清单,网吧组装电脑配置清单
  17. 中兴力维动环监控接线图_肖东晖:动环是基本点 视频监控是增长点
  18. Linux日志切割神器Logrotate的原理和配置详解,建议收藏!!!
  19. 基于Lumerical的光子晶体谐振腔滤波器仿真模拟
  20. 内置函数 ,匿名函数

热门文章

  1. Nodejs 中的包、npm 、第三方模块、 package.json 以及 cnpm
  2. 十九、MySQL常用命令总结
  3. LeetCode 2147. 分隔长廊的方案数
  4. LeetCode 370. 区间加法(差分思想)
  5. LeetCode 837. 新21点(动态规划)
  6. LeetCode 1247. 交换字符使得字符串相同
  7. ggplot2箱式图两两比较_第十九章_使用ggplot2进行高级绘图
  8. 详解nohup和 区别
  9. python中的字典及注意事项
  10. 服务器上有涉密文件,涉密文件保密管理规定