CoreLocation实现定位和导航功能还是非常简单的,基本思路是:

1.导入<CoreLocation/CoreLocation.h>头文件

2.使用该框架内的导航管理者,创建该导航管理者对象 - CLLocationManager

3.想要实现导航定位功能,必须先让控制器成为代理,实现其关于导航定位的代理方法即可

4.开始定位

想要开始定位或者导航,上面4个步骤缺一不可,具体实现Demo如下:

  1. //
  2. // ViewController.m
  3. // 导航
  4. //
  5. // Created by sleeping sun on 16/7/5.
  6. // Copyright © 2016年 sleeping sun. All rights reserved.
  7. //
  8.  
  9. #import "ViewController.h"
  10. #import <CoreLocation/CoreLocation.h>
  11.  
  12. @interface ViewController ()<CLLocationManagerDelegate>
  13. @property (nonatomic,strong) CLLocationManager *manager;
  14. @property (nonatomic,strong) CLLocation *previousLocation;
  15. @property (nonatomic,assign) NSTimeInterval sumTime;
  16. @property (nonatomic,assign) CLLocationDistance sumDistance;
  17. @property (nonatomic,assign) CGFloat averSpeed;
  18. @end
  19.  
  20. @implementation ViewController
  21.  
  22. - (void)viewDidLoad {
  23. [super viewDidLoad];
  24.  
  25. // 1.创建定位管理者
  26. CLLocationManager *manager = [[CLLocationManager alloc] init];
  27.  
  28. // 2.设置代理
  29. manager.delegate = self;
  30.  
  31. // 3.判断设备
  32. if ([[UIDevice currentDevice].systemVersion floatValue] >= 8.0) {
  33. NSLog(@"ios8之后版本");
  34. // 向用户发送请求
  35. /*
  36. 在Info.plist文件中添加如下配置:
  37. (1)NSLocationAlwaysUsageDescription
  38. (2)NSLocationWhenInUseUsageDescription
  39. */
  40. [manager requestAlwaysAuthorization];
  41. }
  42.  
  43. // 4.定位精度 - 定位精度越高,耗电量越大
  44. /*
  45. extern const CLLocationAccuracy kCLLocationAccuracyBest;
  46. extern const CLLocationAccuracy kCLLocationAccuracyNearestTenMeters;
  47. extern const CLLocationAccuracy kCLLocationAccuracyHundredMeters;
  48. extern const CLLocationAccuracy kCLLocationAccuracyKilometer;
  49. extern const CLLocationAccuracy kCLLocationAccuracyThreeKilometers;
  50. */
  51. manager.desiredAccuracy = kCLLocationAccuracyBest;
  52.  
  53. // 5.定位频率 - 控制定位频率,每X米定位一次
  54. manager.distanceFilter = 1;
  55.  
  56. // 6.开始定位
  57. [manager startUpdatingLocation];
  58.  
  59. // 7.持有定位管理者
  60. self.manager = manager;
  61. }
  62.  
  63. #pragma mark - 代理方法
  64. - (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations
  65. {
  66. // 1.计算两个点之间的距离
  67. // 1.1.获取最后一个点的位置
  68. CLLocation *newLocation = [locations lastObject];
  69.  
  70. // 1.2.判断如果第一个点有值,执行以下操作
  71. if (self.previousLocation) {
  72. // 计算两次的距离(米)
  73. CLLocationDistance distance = [newLocation distanceFromLocation:self.previousLocation];
  74.  
  75. // 计算两次之间的时间
  76. NSTimeInterval dTime = [newLocation.timestamp timeIntervalSinceDate:self.previousLocation.timestamp];
  77.  
  78. // 计算速度(M/S)
  79. CGFloat speed = distance / dTime;
  80.  
  81. // 2.计算总时间 - 路程 - 平均速度
  82. // 2.1.总时间
  83. self.sumTime += dTime;
  84.  
  85. // 2.2.总路程
  86. self.sumDistance += distance;
  87.  
  88. // 2.3.平均速度
  89. self.averSpeed = self.sumDistance / self.sumTime;
  90.  
  91. NSLog(@"行驶距离为:%f米,时间:%f秒,速度:%f米/秒",distance,dTime,speed);
  92. NSLog(@"行驶总路程为:%f米,总时间:%f秒,平均速度:%f米/秒",self.sumDistance,self.sumTime,self.averSpeed);
  93. }
  94. self.previousLocation = newLocation;
  95. }
  96. @end

  注意点:在iOS8开始,苹果对用户的隐私非常重视,所以在ios8开始,想要获得用户的授权,必须手动给用户发送授权请求:

1.无论该应用处于前台后台,都发送位置请求

  1. - (void)requestAlwaysAuthorization __OSX_AVAILABLE_STARTING(__MAC_NA, __IPHONE_8_0) __TVOS_PROHIBITED;

Requests permission to use location services whenever the app is running.

需要在Info.plist文件当中进行配置,配置信息如下:NSLocationAlwaysUsageDescription,string字符串可以随意给。

2.当应用处于前台,发送位置请求  

  1. - (void)requestWhenInUseAuthorization __OSX_AVAILABLE_STARTING(__MAC_NA, __IPHONE_8_0);

  Requests permission to use location services while the app is in the foreground.

需要在Info.plist文件当中进行配置,配置信息如下:NSLocationWhenInUseUsageDescription,string字符串可以随意给。

CoreLocation导航Demo的更多相关文章

  1. 实现百度地图导航Demo的语音播报功能

    上文中实现了在本地导入百度地图导航Demo,那么在此基础上如何实现导航的语音播报呢? 一.为该应用申请语音播报(也叫注册) http://developer.baidu.com/map/index.p ...

  2. Java程序员的日常 —— 响应式导航Demo

    这两天想要做响应式的页面,于是本着重复造轮子的想法,模仿Bootstrap官网,精简了一个响应式导航的Demo. 效果 代码 <!DOCTYPE html> <html> &l ...

  3. html——导航demo

    通过行内块.伪类对导航栏进行设置 <!DOCTYPE html> <html> <head> <meta charset="utf-8" ...

  4. CSS——tab导航demo

    问题总结: 1.ul要比外套div宽度的值大一点 2.ul需要往左移动1px 3.外套的div设置overflow隐藏 解决抖动: 1.li宽度设置98px,padding左右值1px,hover之后 ...

  5. CSS——新浪导航demo

    主要运用的dispaly将a变成行内块,再用padding撑开宽度. <!DOCTYPE html> <html lang="en"> <head&g ...

  6. 【iOS】7.4 定位服务->3.2 地图框架MapKit 功能2:路线规划(导航)

    本文并非最终版本,如果想要关注更新或更正的内容请关注文集,联系方式详见文末,如有疏忽和遗漏,欢迎指正. 本文相关目录: ================== 所属文集:[iOS]07 设备工具 === ...

  7. 百度地图SDK下载以及创建应用(申请Key)和本地导入Demo

    一.百度地图SDK下载 http://lbsyun.baidu.com/sdk/download?selected=location 选择全部,然后分别下载开发包.示例代码.类参考. 二.创建应用(申 ...

  8. 3D立体菜单导航

    今天在微博里面看到别人分享的一个立体效果,我觉得挺好的,就拿下来自己存着,万一以后用到. 效果如下: index.html <!DOCTYPE html> <html > &l ...

  9. 关于百度地图导航AndroidSDK的初始化问题

    使用百度地图有一段时间了,导航是一个一直困扰我的问题.今天刚发现百度地图的导航SDK并不是对Android6.0版本不兼容.而是对某一部分手机不兼容,准确的说是对X64或X86的cpu不兼容.下载百度 ...

随机推荐

  1. ASP.NET中分布式事务的使用

    之前发表了一篇事务的存储过程,最近在做项目的时候遇到分布式事务,所有总结一下,跟大家分享和交流一下经验.首先说明为什么要分布式事务呢?先说说我在项目的哪里遇到分布式事务吧,我是在做网站后台开发的时候, ...

  2. 【web开发--js学习】functionName 如果是一个属性值,函数将不会被调用

    <html> <head> <meta http-equiv="Content-Type" Content="text/html; char ...

  3. 004 range的用法

  4. codeforces #330 div2

    A: #include<cstdio> #include<algorithm> #include<cmath> #include<map> #inclu ...

  5. GPS数据处理 - 字符串函数的灵活应用

    题目内容: NMEA- 0183协议是为了在不同的GPS(全球定位系统)导航设备中建立统一的BTCM(海事无线电技术委员会)标准,由美国国家海洋电子协会(NMEA- The National Mari ...

  6. GDAL显示线性shp文件

    http://pan.baidu.com/s/1qWIDphU  (工程文件在vs2008中编写) 1.使用到的技术 GDAL:读取矢量数据 GDI:    绘制矢量数据 2.详细解释 GDI绘图: ...

  7. kettle新建资源库出错

    之前在本地测试新建kettle资源库很顺利,但是在把本地数据迁移到服务器的过程中出现了问题,多次新建资源库失败,提示插入数据错误. 解决办法: 将要执行的sql语句复制出来,单独在Navicat下执行 ...

  8. Github android客户端源代码分析之一:环境搭建

    1.下载相应的包及项目,参考https://github.com/github/android/wiki/Building-From-Eclipse. 2.若需查看某些包的源文件或者javadoc,则 ...

  9. SSO单点登录(转载)

    昨天和几位朋友探讨到了这个话题,发现虽然单点登录,或者叫做独立的passport登录虽然已经有了很多实现方法,但是能真正了解并实现的人却并不太多,所以些下此文,希望从原理到实现,能让大家了解的多一些 ...

  10. UVA 10943 How do you add?

    设函数 f(k)(n); 则: f(1)(n)=1; f(2)(n)=f(1)(0)+f(1)(1)+f(1)(2)+...+f(1)(n); f(3)(n)=f(2)(0)+f(2)(1)+f(2) ...