导读
这篇将介绍CoreLocation
框架关于定位相关的类(CLLocationManager
、CLLocation
)。
CLLocation
:用于表示位置信息,包含地理坐标、海拔等信息,包含在CoreLoaction
框架中。
CLLocationManager位置管理器
-
属性
//位置更新的模式
@property(assign, nonatomic) CLActivityType activityType;
typedef NS_ENUM(NSInteger, CLActivityType) {
CLActivityTypeOther = 1,//未知模式,默认为此
CLActivityTypeAutomotiveNavigation, //车辆导航模式
CLActivityTypeFitness, //行人模式
CLActivityTypeOtherNavigation //其他交通工具模式
};//位置信息更新最小距离,只有当最新的位置与上一次获取的位置之间的距离大于这个距离才更新位置信息,单位为米 @property(assign, nonatomic) CLLocationDistance distanceFilter; kCLDistanceFilterNone;//默认选择,不进行距离限制 //定位精度,单位为米 //注意事项:精确度越高,越耗电,定位所需时间越长 @property(assign, nonatomic) CLLocationAccuracy desiredAccuracy; kCLLocationAccuracyBestForNavigation;//导航最高精确 kCLLocationAccuracyBest;//高精确 kCLLocationAccuracyNearestTenMeters;//10米 kCLLocationAccuracyHundredMeters;//百米 kCLLocationAccuracyKilometer;//千米 kCLLocationAccuracyThreeKilometers;//三公里 //设置iOS设备是否可暂停定位来节省电池的电量。如果该属性设为“YES”,则当iOS设备不再需要定位数据时,iOS设备可以自动暂停定位。默认为YES。 @property(assign, nonatomic) BOOL pausesLocationUpdatesAutomatically; //是否允许后台位置更新,iOS9.0后才出现, //注意事项:要开启这项设置,需要勾选后台模式,否则会崩溃。 @property(assign, nonatomic) BOOL allowsBackgroundLocationUpdates
-
方法
-
类方法
//判断设备是否支持定位服务,通常如果用户没有启用定位服务可以提示用户打开定位服务
+ (BOOL)locationServicesEnabled;//判断设备是否支持航向信息功能(海拔,速度,方向等传感器的支持) + (BOOL)headingAvailable; //判断设备是否支持更新位置信息 + (BOOL)significantLocationChangeMonitoringAvailable //判断设备是否支持区域检测,regionClass是地图框架中的类。 + (BOOL)isMonitoringAvailableForClass:(Class)regionClass; //判断设备是否支持蓝牙测距 + (BOOL)isRangingAvailabl; //定位服务授权状态 + (CLAuthorizationStatus)authorizationStatus; kCLAuthorizationStatusNotDetermined: 用户尚未做出决定是否启用定位服务 kCLAuthorizationStatusRestricted: 没有获得用户授权使用定位服务,可能用户没有自己禁止访问授权 kCLAuthorizationStatusDenied :用户已经明确禁止应用使用定位服务或者当前系统定位服务处于关闭状态 kCLAuthorizationStatusAuthorizedAlways: 应用获得授权可以一直使用定位服务,即使应用不在使用状态 kCLAuthorizationStatusAuthorizedWhenInUse: 使用此应用过程中允许访问定位服务
-
对象方法
//请求获得应用使用时的定位服务授权,注意使用此方法前在要在info.plist中配置<NSLocationWhenInUseUsageDescription>
- (void)requestWhenInUseAuthorization;//请求获得应用一直使用定位服务授权,注意使用此方法前要在info.plist中配置<NSLocationAlwaysUsageDescription> - (void)requestAlwaysAuthorization; //开启定位服务 - (void)startUpdatingLocation; //停止定位服务 - (void)stopUpdatingLocation; //单次定位,iOS9.0出现 - (void)requestLocation //开启航向地理信息服务 - (void)startUpdatingHeading; //停止航向地理信息服务 - (void)stopUpdatingHeading; //立即校准航向 - (void)dismissHeadingCalibrationDisplay; //开始对某个区域进行定位追踪,开始对某个区域进行定位后。如果用户进入或者走出某个区域会调用相应的代理方法 - (void)startMonitoringForRegion:(CLRegion *)region ; //停止对某个区域进行定位追踪 - (void)stopMonitoringForRegion:(CLRegion *)region ;
-
代理方法
//位置发生改变后执行(第一次定位到某个位置之后也会执行)
-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations;//导航方向发生变化后执行 - (void)locationManager:(CLLocationManager *)manager didUpdateHeading:(CLHeading *)newHeading; //进入某个区域之后执行 - (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region; //走出某个区域之后执行 - (void)locationManager:(CLLocationManager *)manager didExitRegion:(CLRegion *)region; //定位失败 - (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error;
-
CLLocation定位服务的位置对象
-
属性
//当前位置所在的经纬度数据
@property(readonly, nonatomic) CLLocationCoordinate2D coordinate;
typedef struct {
CLLocationDegrees latitude;//纬度
CLLocationDegrees longitude;//经度
} CLLocationCoordinate2D;//海拔高度 @property(readonly, nonatomic) CLLocationDistance altitude; //速度 @property(readonly, nonatomic) CLLocationSpeed speed; //航向(设备移动的方向, 值域范围:0.0 ~ 359.9, 正北方向为0.0) @property(readonly, nonatomic) CLLocationDirection course; //定位时的时间戳 @property(readonly, nonatomic, copy) NSDate *timestamp; //水平方向的容错半径 @property(readonly, nonatomic) CLLocationAccuracy horizontalAccuracy; //竖直方向的容错半径 @property(readonly, nonatomic) CLLocationAccuracy verticalAccuracy;
-
对象方法
//计算两个位置对象之间的物理距离, 单位是(米)
- (CLLocationDistance)distanceFromLocation:(const CLLocation*)location; -
注意事项
使用location前,务必判断当前获取的位置是否有效,如果水平精确度小于零, 代表虽然可以获取位置对象, 但是数据错误, 不可用
网友评论