Core Location和Map Kit确定位置

Core Location框架用来确定设备物理位置。

Map Kit框架用于创建实时交互地图来显示想要的位置。

Core Location通过三种技术来实现定位功能:GPS、蜂窝基站ID定位(cell ID Location)和WPS(WIFI Position Service,WIFI定位服务)。其中,GPS定位是最精确的。

  • GPS:GPS通过读取来自多个卫星的微波信号来确定当前位置。苹果公司使用的GPS为Assisted GPS(辅助全球卫星定位系统),也称A-GPS。A-GPS使用网络资源来帮助改进纯粹的GPS性能,其基本原理是通信运营商部署网络服务,移动设备会自动寻找并从中收集数据,这样移动设备能够只依靠GPS卫星更快地确定它的起始位置。
  • 蜂窝基站ID定位:根据设备所属范围内的蜂窝基站位置计算出设备的当前位置。因为每个基站可以覆盖相当广的范围,所以这种定位方式会有较大误差。蜂窝基站ID定位需要一个无线电连接,因此它只能用在iPhone和有3G数据连接功能的iPad上。
  • WPS:使用附近WIFI接入点的MAC(Media Access Control,媒体访问控制)地址,通过参考已知服务提供商及其服务区域的大型数据库来猜测你的位置,会有不到一英里的误差。

这三种方法都很耗电,所以要根据需要来指定精度,避免不必要的电力消耗。

在实际开发中,Core Location所依赖的技术对于应用是隐藏的,我们不需要指定Core Location使用哪种定位服务,只需要指定精度级别,它就会自动从可用的技术中选择可以更好满足需求的那种。

定位功能实现:

  1. 位置管理器
  2. 委托delegate和期望精度desireAccuracydesireAccuracy为双浮点型,单位为米。
  3. 距离筛选器distanceFilter:默认情况下,位置管理器会把检测到的位置更改通知给委托,指定距离筛选器意味着告知位置管理器不要将每个更改都通知你,而是仅当位置更改超过特定大小时通知给委托。设置距离筛选器可以减少应用执行的轮询数。距离筛选器以米为单位。
  4. 获取使用定位服务的权限
  5. 启动位置管理器 startUpdatingLocation()requestLocation()
  6. 获取位置更新:当位置管理器希望将当前位置通知给委托时,它将会调用locationManager(_:didUpdateLocations:)方法,第二个参数是个CLLocation对象数组,代表设备当前位置,可能还有之前的几个位置。如果在较短时间内发生了多次位置更新,那么这几次位置更新有可能会被一次性全部上报(调用一次该方法)。无论何时,数组的最后一项都表示当前位置。
  7. 停止轮询:stopUpdatingLocation()(如果调用的是requestLocation()则不必调用停止轮询的方法)