iOS开发中地图定位功能CoreLacation

第一步:设置环境

在工程中Info.plist文件中加入一句代码:NSLocationWhenInUseUsageDescription这句代码的意思是设置弹框,是否允许定位,如下图

第二步:引入库的头文件,设置代理,设置定位管理器。

#import "ViewController.h"

#import <CoreLocation/CoreLocation.h>
@interface ViewController ()<CLLocationManagerDelegate>

// 定位管理器
@property (nonatomic, strong) CLLocationManager *manage;

第三步:初始化定位管理器, 进行隐私判断并授权

self.manage = [[CLLocationManager alloc] init];
if (![CLLocationManager locationServicesEnabled]) {
        NSLog(@"是否前往隐私进行设置允许定位");
    }

进行版本判断和授权(版本判断可以不执行)

if ([[[UIDevice currentDevice] systemVersion] integerValue] >= 8.0) {
        
        if ([CLLocationManager authorizationStatus] != kCLAuthorizationStatusAuthorizedWhenInUse) {
            /*
             定位服务授权状态,返回枚举类型:
             kCLAuthorizationStatusNotDetermined: 用户尚未做出决定是否启用定位服务
             kCLAuthorizationStatusRestricted: 没有获得用户授权使用定位服务,可能用户没有自己禁止访问授权
             kCLAuthorizationStatusDenied :用户已经明确禁止应用使用定位服务或者当前系统定位服务处于关闭状态
             kCLAuthorizationStatusAuthorizedAlways: 应用获得授权可以一直使用定位服务,即使应用不在使用状态
             kCLAuthorizationStatusAuthorizedWhenInUse: 使用此应用过程中允许访问定位服务
             */
            [self.manage requestWhenInUseAuthorization];
        }
        
    }

第四步:设置定位管理器的代理和相关属性

    // 设置代理
self.manage.delegate = self; // 设置精度 self.manage.desiredAccuracy = 100; // 设置最小更新距离 self.manage.distanceFilter = 100;

第五步:开启定位

[self.manage startUpdatingLocation];

第六步:代理实现方法

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations {
    
    // 获取最后一次位置
    CLLocation *location = locations.lastObject;
    
    // 获取坐标位置
    CLLocationCoordinate2D coordinate = location.coordinate;
    NSLog(@"经度:%f, 纬度:%f, 海拔:%f, 航向:%f, 速度:%f", coordinate.longitude, coordinate.latitude, location.altitude, location.course, location.speed);
    /*
     注意:
     
     1.定位频率和定位精度并不应当越精确越好,需要视实际情况而定,因为越精确越耗性能,也就越费电。
     
     2.定位成功后会根据设置情况频繁调用-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations方法,这个方法返回一组地理位置对象数组,每个元素一个CLLocation代表地理位置信息(包含经度、纬度、海报、行走速度等信息),之所以返回数组是因为有些时候一个位置点可能包含多个位置。
     
     3.使用完定位服务后如果不需要实时监控应该立即关闭定位服务以节省资源。
     
     4.除了提供定位功能,CLLocationManager还可以调用startMonitoringForRegion:方法对指定区域进行监控。
     */
    // 为了节省电源,如果不适用定位,需要把定位关闭
    [self.manage stopUpdatingLocation];
    
    
}

 

posted @ 2016-05-31 17:28  Edison666  阅读(169)  评论(0)    收藏  举报