CoreLocation定位服务


一、简单使用

1.CLLocationManager

- (void)startUpdatingLocation;//开始用户定位

- (void)stopUpdatingLocation;//停止用户定位

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations;//当调用了startUpdatingLocation方法后,就开始不断地定位用户的位置,中途会频繁地调用代理的下面方法

@property(assign, nonatomic) CLLocationDistance distanceFilter;//每隔多少米定位一次

@property(assign, nonatomic) CLLocationAccuracy desiredAccuracy;//定位精确度(越精确就越耗电)

 

2.CLLocation

  @property(readonly, nonatomic) CLLocationCoordinate2D coordinate;// 经纬度,见下面的CLLocationCoordinate2D

  @property(readonly, nonatomic) CLLocationDistance altitude;// 海拔

  @property(readonly, nonatomic) CLLocationDirection course;// 路线,航向(取值范围是0.0° ~ 359.9°,0.0°代表真北方向)

  @property(readonly, nonatomic) CLLocationSpeed speed;// 移动速度(单位是m/s)

  - (CLLocationDistance)distanceFromLocation:(const CLLocation *)location// 计算2个位置之间的距离

 

3.CLLocationCoordinate2D

CLLocationCoordinate2D是一个用来表示经纬度的结构体,定义如下

typedef struct {

        CLLocationDegrees latitude; // 纬度

        CLLocationDegrees longitude; // 经度

} CLLocationCoordinate2D;

一般用CLLocationCoordinate2DMake函数来创建CLLocationCoordinate2D

ios 8之后需要在info.plist文件中添加两个key



#import "ViewController.h"
#import 
@interface ViewController ()
@property (nonatomic, strong) CLLocationManager *locationManger;
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    // 1.创建定位管理者
    CLLocationManager *locationManager = [[CLLocationManager alloc] init];
    self.locationManger = locationManager;
    // 2.想用户请求授权(iOS8之后方法)   必须要配置info.plist文件
    if ([UIDevice currentDevice].systemVersion.floatValue >= 8.0) {
        // 以下方法选择其中一个
        // 请求始终授权   无论app在前台或者后台都会定位
//        [locationManager requestAlwaysAuthorization];
        // 当app使用期间授权    只有app在前台时候才可以授权
        [locationManager requestWhenInUseAuthorization];
    }
    // 距离筛选器   单位:米   100米:用户移动了100米后会调用对应的代理方法didUpdateLocations
//    locationManager.distanceFilter = 100.0;
//    // 期望精度  单位:米   100米:表示将100米范围内看做一个位置 导航使用kCLLocationAccuracyBestForNavigation
//    locationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation;
    // 3.设置代理
    locationManager.delegate = self;
    // 4.开始定位 (更新位置)
    [locationManager startUpdatingLocation];
    
    // 5.临时开启后台定位  iOS9新增方法  必须要配置info.plist文件 不然直接崩溃
    locationManager.allowsBackgroundLocationUpdates = YES;
    
    [self compareDistance];
}

// 比较两点之间的距离  --直线距离
- (void)compareDistance
{
    // 北京的位置
    CLLocation *location = [[CLLocation alloc] initWithLatitude:39 longitude:115];
    // 上海的位置
    CLLocation *location1 = [[CLLocation alloc] initWithLatitude:30 longitude:120];
    // 比较距离  单位:米
    CGFloat distance = [location distanceFromLocation:location1];
    NSLog(@"%f",distance / 1000);
    
}
// 当定位到用户位置时调用
// 调用非常频繁(耗电)
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
{
    // 一个CLLocation对象代表一个位置
    NSLog(@"%@",locations);
    // 停止定位
//    [manager stopUpdatingLocation];
}
@end


你可能感兴趣的:(iOS开发,OC编程,移动开发,编程技巧)