Core Location (用于地理定位)和MapKit系列(简单汽车导航)

#import "ViewController.h"
#import

@interface ViewController ()
// 创建定位管理者
@property (nonatomic, strong) CLLocationManager *mgr;
// 上一次的位置
@property (nonatomic, strong) CLLocation *previousLocation;
// 总路程
@property (nonatomic, assign) CLLocationDistance sumDistance;
// 总时间
@property (nonatomic, assign) NSTimeInterval sumTime;

@end

@implementation ViewController

- (void)viewDidLoad { [super viewDidLoad]; // 1.创建定位管理者 // CLLocationManager *mgr = [[CLLocationManager alloc] init]; // 2.设置代理 self.mgr.delegate = self; // 3.判断是否是iOS8 if ([[UIDevice currentDevice].systemVersion doubleValue] >= 8.0) { // 主动请求授权 [self.mgr requestAlwaysAuthorization]; } // 3.开始定位 [self.mgr startUpdatingLocation]; }

#pragma mark - CLLocationManagerDelegate
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations { // CLLocation; timestamp 当前获取到为止信息的时间 /* 获取走了多远(这一次的位置 减去上一次的位置) 获取走这段路花了多少时间 (这一次的时间 减去上一次的时间) 获取速度 (走了多远 / 花了多少时间) 获取总共走的路程 (把每次获取到走了多远累加起来) 获取平均速度 (用总路程 / 总时间) */ // 获取当前的位置 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; // 累加时间 self.sumTime += dTime; // 累加距离 self.sumDistance += distance; // 计算平均速度 CGFloat avgSpeed = self.sumDistance / self.sumTime; NSLog(@"距离%f 时间%f 速度%f 平均速度%f 总路程 %f 总时间 %f", distance, dTime, speed, avgSpeed, self.sumDistance, self.sumTime); } // 纪录上一次的位置 self.previousLocation = newLocation; }

#pragma mark - 懒加载
- (CLLocationManager *)mgr { if (!_mgr) { self.mgr = [[CLLocationManager alloc] init]; } return _mgr; }

你可能感兴趣的:(Core Location (用于地理定位)和MapKit系列(简单汽车导航))