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)相关推荐
- 基于高德地图SDK实现跑步路线踩点
前言 现在市面上有很多跑步的app,主要的功能大致是记录你的跑步路线以及你的跑步状况,速度距离等,大多是使用了高德地图,百度地图之类的SDK. 之前学校里有一款课外体育考勤的跑步APP,叫运动 ...
- IOS将GPS定位经纬度转换为高德地图经纬度
https://github.com/JackZhouCn/JZLocationConverter http://www.eoeandroid.com/forum.php?mod=viewthread ...
- HTML5 新特性 - 地理定位(基于高德地图API)
定位的基础与原理 IP定位 运营商基站定位 GPS定位 地理定位的实现 地理定位API允许用户向web应用程序提供他们的位置(经纬度).但是这个操作需要用户授权. 获取地理定位的相关代码如下: let ...
- 基于高德地图SDK开发之地图显式
显示高德地图 1..Framlayout帧布局 直接在屏幕上开辟出一块空白区域,添加的所有组件都放置在区域左上角. 大小由最大子控件决定. 前景图像:永远处于帧布局最顶的,直接面对用户的图像(不会被覆 ...
- 【iOS】—— 高德地图SDK基础使用
最近稍微学了学iOS调用高德的SDK,就随便做做笔记.注意:本篇博客基于高德地图SDK的3D地图来写的,若使用的是2D地图可能有的方法可能有所不同,比如自定义定位蓝点之类的. 一.准备工作: 具体的准 ...
- Android基于高德SDK的开发——自定义地图主题样式(悬浮按钮+底部弹窗)
日常的地图使用中,平台一般只会给我们提供地图的标准样式,造成了一定程度上的审美疲劳,那么如何实现地图的自定义样式呢?本文使用Android Studio 4.1,给开发者提供了一个基于高德地图SDK进 ...
- ios 持续获取定位 高德地图_概述-iOS 定位SDK | 高德地图API
简介 高德 iOS 定位 SDK 提供了不依赖于地图定位的定位功能,开发者可以无地图显示的场景中便捷地为应用程序添加定位功能. iOS定位SDK提供了单次定位.连续定位.逆地理信息.地理围栏等功能. ...
- 关于微信H5高德iOS定位失败的解决办法
在微信浏览器环境内 安卓一切正常 IOS却显示定位失败. 网上查找, 原来前辈们已经有解决方案 : 将定位功能提前至项目启动时调用. 这有这样才能唤起iOS的定位权限. 至于为何,有待探索
- 高德h5定位误差_#高德地图api移动端定位失败解决方案 #H5 原生Geollocation接口Chomre浏览器的坑...
侧重:本文探索了 http 协议下,pc + 移动端定位解决方案 IOS版本: ios14 原生Geolocation 接口: Document Show my location function g ...
最新文章
- 如何在StackOverflow上获得第一个标签徽章-以及为什么它很重要。
- python pymysql
- python htmltestrunner报告_Python HTMLTestRunner可视化报告实现过程解析
- 长春工业大学计算机专科吧,长春工业大学是几本 学生评价怎么样好不好(10条)...
- 模板方法及策略设计模式实践
- Linux apt-get命令
- CentOS 查看系统版本号
- matlab调制函数,matlab用于数字调制,几个函数的使用问题
- POJ 1200 Crazy Search(RK)
- STM32F103按键操作的另一种实现——状态机
- 大数据时代下的信息安全
- java setenabled不好用,哪个更好,setEnabled或setUserInteractionEnabled?
- C++ 把引用作为函数参数
- python地区房价数据分析_数据分析——房价分析
- javascript指定日期增加自然月份(有闰年2月判断)
- 网吧用计算机性能配件清单,网吧组装电脑配置清单
- 中兴力维动环监控接线图_肖东晖:动环是基本点 视频监控是增长点
- Linux日志切割神器Logrotate的原理和配置详解,建议收藏!!!
- 基于Lumerical的光子晶体谐振腔滤波器仿真模拟
- 内置函数 ,匿名函数