定位- 汽车导航

#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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值