地图
地图中常用的对象
CLLocationManager
定位管理者CLLocation
代表位置(经度/纬度/高度/速度/路线等)CLHeading
代表移动方向CLRegion
代表一个区域CLCircularRegion
圆形区域CLBeaconRegion
蓝牙信号区域
CLLocationManager
类方法
- 返回定位服务是否可用
[CLLocationManager locationServicesEnabled];
- 返回延迟定位更新是否可用
[CLLocationManager deferredLocationUpdatesAvailable];
- 返回重大位置改变监听是否可用
[CLLocationManager significantLocationChangeMonitoringAvailable];
- 返回是否支持磁力计算方向
[CLLocationManager headingAvailable];
- 返回蓝牙信号范围服务是否可用
[CLLocationManager isRangingAvailable];
对象方法
- 设置是否可以暂停定位来节省电池电量, YES不需要定位数据时自动暂停定位
mgr.pausesLocationUpdatesAutomatically
- 每隔多少米定位一次, 只有水平方向超过该值时才会重新定位
mgr.distanceFilter = 100;
定位精确度
mgr.desiredAccuracy; // 枚举值注释 kCLDistanceFilterNone; kCLLocationAccuracyBestForNavigation 导航级最佳精准 kCLLocationAccuracyBest; 最佳精准 kCLLocationAccuracyNearestTenMeters; 10米误差 kCLLocationAccuracyHundredMeters; 百米胡茬 kCLLocationAccuracyKilometer; 千米误差 kCLLocationAccuracyThreeKilometers; 3千米误差
定位数据的用途
mgr.activityType; CLActivityTypeOther 作为普通用途 CLActivityTypeAutomotiveNavigation 作为车辆导航 CLActivityTypeFitness 作为不行 CLActivityTypeOtherNavigation 作为其它导航
CLLocation
常用属性
location.coordinate; 坐标, 包含经纬度 location.altitude; 设备海拔高度 单位是米 location.course; 设置前进方向 0表示北 90东 180南 270西 location.horizontalAccuracy; 水平精准度 location.verticalAccuracy; 垂直精准度 location.timestamp; 定位信息返回的时间 location.speed; 设备移动速度 单位是米/秒, 适用于行车速度而不太适用于不行 /* 可以设置模拟器模拟速度 bicycle ride 骑车移动 run 跑动 freeway drive 高速公路驾车 */
- CLAuthorizationStatus
用户从未选择过权限 kCLAuthorizationStatusNotDetermined 无法使用定位服务,该状态用户无法改变 kCLAuthorizationStatusRestricted 用户拒绝该应用使用定位服务,或是定位服务总开关处于关闭状态 kCLAuthorizationStatusDenied 已经授权(废弃) kCLAuthorizationStatusAuthorized 用户允许该程序无论何时都可以使用地理信息 kCLAuthorizationStatusAuthorizedAlways 用户同意程序在可见时使用地理位置 kCLAuthorizationStatusAuthorizedWhenInUse
- 计算两个位置之间的距离, 单位是米
[newLocation distanceFromLocation:self.prevLocation];
- 获取方向信息不会提示用户(不需要授权), 因为不会泄露隐私
[self.mgr startUpdatingHeading];
- magneticHeading 设备与磁北的相对角度
- trueHeading 设置与真北的相对角度, 必须和定位一起使用, iOS需要设置的位置来计算真北
- 真北始终指向地理北极点
- 磁北对应随着时间变化的地球磁场北极
- 牛逼的地方
116.958776,36.721199
- 错误:使用CoreLocation获取地理位置信息,报错
Error Domain=kCLErrorDomain Code=0 "The operation couldn’t be completed. (kCLErrorDomain error 0.)"
- 解决方法:
- 确定模拟器(手机)已经联网并且允许程序获取地理位置
- 重置地理位置服务或者网络服务
- PS:如果是模拟器就果断直接重置模拟器吧 iOS Simulator - Reset Content and Settings...