获取定位信息
iOS开发者使用CoreLocation.framework框架进行定位非常简单CoreLocation框架的常用API主要有如下几个。
CLLocationManager定位管理器类。CLLocationManagerdelegate该协议代表定位管理器的delegate协议。实现该协议的对象可负责处理CLLocationManager的定位事件。CLLocation该对象代表位置。该对象包含了当前设备的 经度、纬度、高度、速度、路线等信息还包含了该定位信息的水平精确度、垂直精确度以及时间戳信息。CLHeading该对象代表设备的移动方向。CLRegion该对象代表一个区域。一般程序不会直接使用该类而是使用它的两个子类即CLCircularRegion圆形区域和CLBeaconRegion蓝牙信号区。
除此之外CoreLocation框架还涉及一个CLLocationCoordinate2D结构体变量该结构体变量包含 经度、纬度 两个值。其中CLLocation对象的coordinate属性就是一个CLLocationCoordinate2D结构体变量。
获取位置信息
使用CoreLocation.framework进行定位只要如下3步即可。
- 创建
CLLocationManager对象该对象负责获取定位相关信息。并为该对象设置一些必要的属性。 - 为
CLLocationManager指定delegate属性该属性值必须是一个实现CLLocationManagerDelegate协议的对象。实现CLLocationManagerDelegate协议时可根据需要实现协议中特定的方法。 - 调用
CLLocationManager的startUpdatingLocation方法获取定位信息。定位结束时可调用stopUpdatingLocation方法结束获取定位信息
#解析:
LLocationManager负责获取定位信息 而delegate则 负责处理定位事件 ——通过这些事件即可获取设备所在位置。
CLLocationManager还提供了如下类方法来判断当前设备的定位相关服务状态。
+ locationServicesEnabled返回当前定位服务是否可用。+ deferredLocationUpdatesAvailable返回延迟定位更新是否可用。+ significantLocationChangeMonitoringAvailable返回重大位置改变监听是否可用。+ headingAvailable返回该设备是否支持磁力计计算方向。+ isRangingAvailable返回蓝牙信号范围服务是否可用。这是iOS 7新增的方法。
除此之外在使用CLLocationManager开始定位之前还可为该对象设置如下属性。
pausesLocationUpdatesAutomatically设置iOS设备是否可暂停定位来节省电池的电量。如果该属性设为“YES”则当iOS设备不再需要定位数据时iOS设备可以自动暂停定位。
distanceFilter设置CLLocationManager的自动过滤距离。也就是说只有当设备在水平方向的位置改变超过该数值以米为单位指定的距离时才会生成一次位置改变的信号。desiredAccuracy设置定位服务的精度。该属性值支持kCLLocationAccuracyBestForNavigation导航级的最佳精确度、kCLLocationAccuracyBest最佳精确度、kCLLocationAccuracy NearestTenMeters10米误差、kCLLocationAccuracyHundredMeters百米误差、kCLLocationAccuracyKilometer千米误差、kCLLocationAccuracyThreeKilometers三千米误差等常量值。当然也可直接指定一个浮点数作为定位服务允许的误差。
activityType设置定位数据的用途。该属性支持CLActivityTypeOther定位数据作为普通用途、CLActivityTypeAutomotiveNavigation定位数据作为车辆导航使用、CLActivityTypeFitness定位数据作为步行导航使用CLActivityTypeOtherNavigation定位数据作为其他导航使用这几个枚举值之一。
CLLocation对象中包含如下属性这些属性包含了定位相关信息。
altitude该属性表示当前设备的海拔高度单位是米。coordinate该属性返回一个CLLocationCoordinate2D结构体变量该结构体变量中包含经度、纬度信息。course该属性表示当前设备前进的方向。该值为0°表示向北90°表示向东180°表示向南270°表示向西。horizontalAccuracy该属性表明定位信息的水平精确度。将返回的坐标作为圆心并将水平精确度视为半径。真正的设备位置落在此圆内的某处。此圆越小位置就越精确此圆越大则位置越不精确。如果精确度为负值则表明测量精确度失败。verticalAccuracy该属性表明定位信息的垂直精确度。也就是说iOS设备的实际高度在该定位信息的高度加或减该属性值的范围内。
timestamp该属性返回定位信息的返回时间。speed该属性表示返回设备的移动速度单位是米/秒。实际上该属性适用于行车速度而不太适用于步行速度。