博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
定位- 汽车导航
阅读量:4325 次
发布时间:2019-06-06

本文共 2241 字,大约阅读时间需要 7 分钟。

#import "ViewController.h"

#import <CoreLocation/CoreLocation.h>

 

 

@interface ViewController ()<CLLocationManagerDelegate>

 

 /**  1. 定位管理者对象 ***/

@property (nonatomic, strong) CLLocationManager *mgr;

 

 

 /**  上一次的位置 ***/

@property (nonatomic, strong) CLLocation *previousLocation;

 /**  总路程 ***/

@property (nonatomic, assign) CLLocationDistance sumDistance;

 /**  总时间 ***/

@property (nonatomic, assign) NSTimeInterval sumTime;

 

@end

 

@implementation ViewController

 

- (CLLocationManager *)mgr{

    if (!_mgr) {

        _mgr = [[CLLocationManager alloc] init];

    }

    return _mgr;

}

 

 

- (void)viewDidLoad {

    [super viewDidLoad];

    

    // 2. 设置代理

    self.mgr.delegate = self;

    

   // plist

//    NSLocationAlwaysUsageDescription

//    NSLocationWhenInUseUsageDescription

   

    // 3. 开始监听

    // 判断授权

    if(IOS8){

        [self.mgr requestAlwaysAuthorization];

    }else{

        [self.mgr startUpdatingLocation];

    }

    

}

 

 

#pragma mark - 当授权状态改变时, 调用此方法

- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status

{

    if (status == kCLAuthorizationStatusNotDetermined) {

        LogYellow(@"正在授权中");

    }else if ((status == kCLAuthorizationStatusAuthorizedAlways) || (status == kCLAuthorizationStatusAuthorizedWhenInUse)){

        LogYellow(@"授权成功");

        

        // 开始监听

        [self.mgr startUpdatingLocation];

    }else{

        LogYellow(@"授权失败");

    }

}

 

 

#pragma mark - CLLocationManagerDelegate

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations

{

    // 导航

    /**

     获取走了多远

     获取走这段路花了多少时间

     获取速度

     获取总共多少路程

     获取平均速度

     */

    

    // 获取当前位置

    CLLocation *newLocation = [locations lastObject];

    

    if(self.previousLocation != nil){

        // 计算两次距离

        CLLocationDistance distance = [newLocation distanceFromLocation:self.previousLocation];

        // 计算两次时间

        NSTimeInterval dTime = [newLocation.timestamp timeIntervalSinceDate:self.previousLocation.timestamp];

        // 计算速度

        CGFloat speed = distance / dTime;

        LogRed(@"  %f,   %f,   %f",distance, dTime, speed);

        

        // 累计时间

        self.sumTime += dTime;

        // 累计路程

        self.sumDistance += distance;

        // 计算平均速度

        CGFloat avgSpeed = self.sumDistance / self.sumTime;

        

        LogGreen(@"总路程  %f,总时间   %f,平均速度   %f",self.sumDistance, self.sumTime, avgSpeed);

    }

    

    // 记录上一次的位置

    self.previousLocation = newLocation;

    

    // 当前获取到 信息的时间

//    location.timestamp

    

    

    

    // 停止监听

//    [self.mgr stopUpdatingLocation];

}

 

@end

转载于:https://www.cnblogs.com/guangleijia/p/4826131.html

你可能感兴趣的文章
tensorflow 变量共享
查看>>
NSString的长度比较方法(一)
查看>>
初识JavaScript
查看>>
Azure云服务托管恶意软件
查看>>
My安卓知识6--关于把项目从androidstudio工程转成eclipse工程并导成jar包
查看>>
旧的起点(开园说明)
查看>>
Testing your Xamarin app on Android device
查看>>
丢失控制文件恢复实验记录--4(在线日志文件没有损坏,归档日志丢失,直接重建控制文件(跟踪控制文件trace是旧的情况))...
查看>>
生产订单“生产线别”带入生产入库单
查看>>
crontab导致磁盘空间满问题的解决
查看>>
java基础 第十一章(多态、抽象类、接口、包装类、String)
查看>>
Hadoop 服务器配置的副本数量 管不了客户端
查看>>
欧建新之死
查看>>
C程序之修改Windows的控制台颜色(转载)
查看>>
自定义滚动条
查看>>
[QT][待解决问题]对话框ui载入卡顿问题
查看>>
jquery中单选选中及清除选中状态
查看>>
APP开发手记01(app与web的困惑)
查看>>
笛卡尔遗传规划Cartesian Genetic Programming (CGP)简单理解(1)
查看>>
mysql 日期时间运算函数(转)
查看>>