• CoreLocation导航Demo


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

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

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

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

    4.开始定位

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

    //
    //  ViewController.m
    //  导航
    //
    //  Created by sleeping sun on 16/7/5.
    //  Copyright © 2016年 sleeping sun. All rights reserved.
    //
    
    #import "ViewController.h"
    #import <CoreLocation/CoreLocation.h>
    
    @interface ViewController ()<CLLocationManagerDelegate>
    @property (nonatomic,strong) CLLocationManager *manager;
    @property (nonatomic,strong) CLLocation *previousLocation;
    @property (nonatomic,assign) NSTimeInterval sumTime;
    @property (nonatomic,assign) CLLocationDistance sumDistance;
    @property (nonatomic,assign) CGFloat averSpeed;
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
    
        // 1.创建定位管理者
        CLLocationManager *manager = [[CLLocationManager alloc] init];
        
        // 2.设置代理
        manager.delegate = self;
        
        // 3.判断设备
        if ([[UIDevice currentDevice].systemVersion floatValue] >= 8.0) {
            NSLog(@"ios8之后版本");
            // 向用户发送请求
            /*
              在Info.plist文件中添加如下配置:
             (1)NSLocationAlwaysUsageDescription
             (2)NSLocationWhenInUseUsageDescription
             */
            [manager requestAlwaysAuthorization];
        }
        
        // 4.定位精度 - 定位精度越高,耗电量越大
        /*
         extern const CLLocationAccuracy kCLLocationAccuracyBest;
         extern const CLLocationAccuracy kCLLocationAccuracyNearestTenMeters;
         extern const CLLocationAccuracy kCLLocationAccuracyHundredMeters;
         extern const CLLocationAccuracy kCLLocationAccuracyKilometer;
         extern const CLLocationAccuracy kCLLocationAccuracyThreeKilometers;
         */
        manager.desiredAccuracy = kCLLocationAccuracyBest;
        
        // 5.定位频率 - 控制定位频率,每X米定位一次
        manager.distanceFilter = 1;
        
        // 6.开始定位
        [manager startUpdatingLocation];
        
        // 7.持有定位管理者
        self.manager = manager;
    }
    
    #pragma mark - 代理方法
    - (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations
    {
        // 1.计算两个点之间的距离
        // 1.1.获取最后一个点的位置
        CLLocation *newLocation = [locations lastObject];
        
        // 1.2.判断如果第一个点有值,执行以下操作
        if (self.previousLocation) {
            // 计算两次的距离(米)
            CLLocationDistance distance = [newLocation distanceFromLocation:self.previousLocation];
            
            // 计算两次之间的时间
            NSTimeInterval dTime = [newLocation.timestamp timeIntervalSinceDate:self.previousLocation.timestamp];
            
            // 计算速度(M/S)
            CGFloat speed = distance / dTime;
            
            // 2.计算总时间 - 路程 - 平均速度
            // 2.1.总时间
            self.sumTime += dTime;
            
            // 2.2.总路程
            self.sumDistance += distance;
            
            // 2.3.平均速度
            self.averSpeed = self.sumDistance / self.sumTime;
            
            NSLog(@"行驶距离为:%f米,时间:%f秒,速度:%f米/秒",distance,dTime,speed);
            NSLog(@"行驶总路程为:%f米,总时间:%f秒,平均速度:%f米/秒",self.sumDistance,self.sumTime,self.averSpeed);
        }
        self.previousLocation = newLocation;
    }
    @end
    

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

    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.当应用处于前台,发送位置请求  

    - (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字符串可以随意给。

  • 相关阅读:
    Go-15-flag.String 获取系统参数
    Go-14-解决 go get golang.org/x/text 拉取失败问题
    Go-08-函数与指针
    redis 学习(6)-- 集合类型
    redis 学习(5)-- 列表类型
    redis 学习(4)-- 哈希类型
    redis 学习(3)-- String 类型
    redis 学习(二)-- 通用命令
    redis 学习(1)-- redis 安装与启动
    Mysql 索引原理及优化
  • 原文地址:https://www.cnblogs.com/sleepingSun/p/5643078.html
Copyright © 2020-2023  润新知