您的位置:首页 > 移动开发 > IOS开发

IOS定位服务的应用 详解

2016-01-08 18:00 766 查看
http://my.oschina.net/u/2340880/blog/414760


IOS定位服务的应用


一、授权的申请与设置

在IOS8之后,IOS的定位服务做了优化,若要使用定位服务,必须先获取用户的授权。

首先需要在info.plist文件中添加一个键:NSLocationAlwaysUsageDescription或者NSLocationWhenInUseUsageDescription。其中NSLocationAlwaysUsageDescription是要始终使用定位服务,NSLocationWhenInUseUsageDescription是只在前台使用定位服务。





IOS8中CLLocationManager新增的两个新方法:

- (void)requestAlwaysAuthorization;

- (void)requestWhenInUseAuthorization;

这两个方法对应上面的两个键值,用于在代码中申请定位服务权限。


二、定位服务相关方法

IOS的定位服务在CoreLocation.framework框架内,首先引入这个框架:





开启定位服务的代码非常简单,示例如下:

?
CLLocationManager相关方法解读:

+ (BOOL)locationServicesEnabled;

判断设备是否支持定位服务

+ (BOOL)headingAvailable;

判断设备是否支持航向信息功能(海拔,速度,方向等传感器的支持)

+ (BOOL)significantLocationChangeMonitoringAvailable;

判断设备是否支持更新位置信息

+ (BOOL)isMonitoringAvailableForClass:(Class)regionClass;

判断设备是否支持区域检测,regionClass是地图框架中的类。

+ (BOOL)isRangingAvailabl;

判断设备是否支持蓝牙测距

+ (CLAuthorizationStatus)authorizationStatus;

获得定位服务的授权状态,CLAuthorizationStatus的枚举如下:

?
@property(assign, nonatomic) CLActivityType activityType;

这个属性用来设置位置更新的模式,枚举如下:

?
模式的应用可以起到节省电量的作用,例如车辆导航模式,当汽车停止时,位置更新服务会暂停。

@property(assign, nonatomic) CLLocationDistance distanceFilter;

设置位置更新的敏感范围,单位为米。

@property(assign, nonatomic) CLLocationAccuracy desiredAccuracy;

设置定位服务的精确度,系统定义好的几个参数如下:

kCLLocationAccuracyBestForNavigation;//导航最高精确

kCLLocationAccuracyBest;//高精确

kCLLocationAccuracyNearestTenMeters;//10米

kCLLocationAccuracyHundredMeters;//百米

kCLLocationAccuracyKilometer;//千米

kCLLocationAccuracyThreeKilometers;//三公里

@property(assign, nonatomic) BOOL pausesLocationUpdatesAutomatically;

设置位置更新是否自动暂停

@property(readonly, nonatomic, copy) CLLocation *location;

最后一次更新的位置信息,只读属性

@property(assign, nonatomic) CLLocationDegrees headingFilter;

相关航向更新的敏感范围

@property(assign, nonatomic) CLDeviceOrientation headingOrientation;

定位航向时的参照方向默认为正北,枚举如下:

?
@property(readonly, nonatomic, copy) CLHeading *heading;

最后一个定位得到的航向信息

- (void)startUpdatingLocation;

开启定位服务

- (void)stopUpdatingLocation;

停止定位服务

- (void)startUpdatingHeading;

开启航向地理信息服务

- (void)stopUpdatingHeading;

停止航向地理信息服务


三、定位服务代理的相关方法

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations;

位置更新后调用的方法,数组中是所有定位到的位置信息,最后一个是最新的。

- (void)locationManager:(CLLocationManager *)manager didUpdateHeading:(CLHeading *)newHeading;

航向信息更新后调用的方法

- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error;

定位异常时调用的方法


四、定位服务获取到的位置对象

上面也提到,定位后返回的数组中存放的都是CLLocation对象,这里面有很详细的位置信息,属性如下:

@property(readonly, nonatomic) CLLocationCoordinate2D coordinate;

经纬度属性,CLLocationCoordinate2D是一个结构体,如下:

?
@property(readonly, nonatomic) CLLocationDistance altitude;

海拔高度,浮点型

@property(readonly, nonatomic) CLLocationAccuracy horizontalAccuracy;

水平方向的容错半径

@property(readonly, nonatomic) CLLocationAccuracy verticalAccuracy;

竖直方向的容错半径

@property(readonly, nonatomic) CLLocationDirection course;

设备前进的方向,取值范围为0-359.9,相对正北方向

@property(readonly, nonatomic) CLLocationSpeed speed;

速度,单位为m/s

@property(readonly, nonatomic, copy) NSDate *timestamp;

定位时的时间戳


五、航标定位得到的航标信息对象

CLHeading对象的属性信息:

@property(readonly, nonatomic) CLLocationDirection magneticHeading;

设备朝向航标方向,0为北磁极。

@property(readonly, nonatomic) CLLocationDirection trueHeading;

设备朝向真实方向,0被地理上的北极

@property(readonly, nonatomic) CLLocationDirection headingAccuracy;

方向偏差

@property(readonly, nonatomic) CLHeadingComponentValue x;

x轴的方向值

@property(readonly, nonatomic) CLHeadingComponentValue y;

y轴方向值

@property(readonly, nonatomic) CLHeadingComponentValue z;

z轴方向值

@property(readonly, nonatomic, copy) NSDate *timestamp;

方向定位时间戳
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: