iOS 使用CoreLocation定位

    CoreLocation框架(CoreLocation.framework)可用于定位设备当前经纬度,通过框架应用程序可用过附近的蜂窝基站、wifi信号或者GPS等信息计算用户围着。

    iOS SDK提供了CLLocationManager、CLLocationManagerDelegate 来处理设备的定位信息,包括获取设备的方向以及进行方向检测等。其中CLLocationManager是整个CoreLocation框架的核心,定位、方向检测、区域检测等都由该API完成;协议CLLocationManagerDelegate的对象可作为CLLocationManager的delegate对象,主要负责CLLocationManager的定位、方向检测、区域检测等事件。iOS还提供了CLLocation(位置信息)、CLHeading(设备方向)、C1Region(区域)等API;这两个共同组成了CoreLocation框架。

    1.  iOS定位支持

iOS支持的3中定位模式:GPS卫星定位、基站定位、wifi定位

GPS定位耗电量打,速度最慢,但是精度最高;

基站定位速度最快,耗电量比较少,但误差较大;

WiFi定位速度、耗电量和精准度都介于基站和GPS之间,精度大概在几十米范围内;

    2. 获取定位信息

2.1 CoreLocation框架常用API主要有如下几个:

(1)CLLocationManager :定位管理器类。

(2)CLLocationManagerDelegate:该协议代表定位管理器的delegate协议。实现对象可负责处理CLLocationManager的定位事件。

(3)CLHeading:对象代表位置。对象包含了当前设备的精度、纬度、高度、速度、线路等信息,还包括了该定位信息的水平精确度、垂直精确度以及时间戳信息。

(4)CLRegion:对象代表一个区域。一般程序不会直接使用该类。

2.2 获取位置信息

CoreLocation.framework 进行定位只要如下三个步骤:

(1)创建CLLocationManager对象,该对象负责获取定位相关信息。并为该对象设置一些必要的属性;

(2)为CLLocationManager指定delegate属性,该属性必须是一个实现CLLocationManagerDelegate协议的对象。实现CLLocationManagerDelegate协议时看根据需要实现协议中特定的方法;

(3)调用CLLocationManager的startUpdatingLocation方法获取定位信息。定位结束时,可调用stopUpdateingLocation方法结束获取定位信息。

CLLocationManager还提供了如下类方法来判断当前设备的定位相关服务状态:

+ locationServicesEnabled :返回当前定位服务是否可用;

+ deferredLocationUpdatesAvailable :返回延迟定位更新是否可用;

+ significantLocationChangeMonitoringAvailable :返回重大位置改变监听是否可用;

+ headingAvailable :返回该设备是否支持磁力计算方向;

+ isRangingAvailable :返回蓝牙信号范围服务是否可用;

除此之外,在使用CLLocationManager开始定位之前,还可为该对象设置如下属性:

pausesLocationUpdatesAutomatically: 设置iOS设备是否可暂停定位来节省电池的电量。如果该属性设为"YES",则当iOS设备不再需要定位数据时,iOS设备可用自动暂停定位;

distanceFilter: 设置CLLocationManager的自动过滤距离,也就是说,只有当设备在水平方向的位置改变超过该数值(以米为单位)指定的距离时才会生成一次位置改变的信号;

desiredAccuracy :设置定位服务的精度;

activityType :设置定位数据的用途;(3个枚举值:other(普通用途)、navigation(车辆导航使用)、fitness(步行导航使用)和otherNavigation(其他导航使用));


CLLocation是定位成功后返回的定位数据对象,其对象包含如下属性,这些属性高喊了定位相关信息:

altitude :表示设备当前的海拔高度(米);

coordinate :该属性返回一个CLLocationCoordinate2D结构体变量,该结构体变量中包含经度、纬度信息;

course :该属性表示当前设备前进的方向。值为0°标示向北,90°标示向东,180°标示向南,270°标示向西;

      horizontalAccuracy :该属性表明定位信息的水平精确度;

      verticalAccuracy :该属性表明定位信息的垂直精确度;

      timestamp :该属性返回定位信息的返回时间;

      speed :该属性返回设备的移动速度,主要适用于车行速度而不太适用于步行速度;

3. 方向检测

拥有GPS硬件的设备可以生产设备的当前方向(course属性)和速度信息。iPhone设备携带的定位管理器可以返回一个已经设计好的course值,通过这个值我们可以获得当前前进的方向,course值是0~360之间的浮点数,值为0°标示向北,90°标示向东,180°标示向南,270°标示向西,程序可以通过course值来检查用户位置的移动方向。除此之外,还可以通过磁力计来获取设备的真实方向。

iOS系统通过heading属性来获取设备的真实方向。如果定位管理器支持heading属性,那么CLLocationManager的headingAvailable属性将会返回“YES”;

CoreLocation.framework 获取设备方向只要如下三个步骤:

(1)创建CLLocationManager对象,该对象负责获取定位相关信息。并为该对象设置一些必要的属性;

(2)为CLLocationManager指定delegate属性,该属性必须是一个实现CLLocationManagerDelegate协议的对象。实现CLLocationManagerDelegate协议时看根据需要实现协议中特定的方法;

(3)调用CLLocationManager的startUpdatingLocation方法获取定位信息。定位结束时,可调用stopUpdateingHeadiing方法结束获取定位信息。

 当设备的方向改变时,iOS系统会自动激发CLLocationManager的delegate对象的locationManager:didUpdateHeading:方法,而程序可用过重写该方法来获取设备方向。

iOS允许为检测方向改变设置如下属性:

CLLocationDegrees headingFilter:设置只有当设备方向的改变值超过该属性值时才激发delegate的方法;

CLDeviceOrientation headingOrigentation:设置设备当前方向。

监听方向时返回的是一个CLHeading对象,该对象包含如下属性:

mageticHeading:该属性返回设备与磁北的相对方向;

trueHeading:该属性返回设备与真北的相对方向;

headingAccuracy:该属性返回方向值得误差范围;

timestamp:该属性返回方向值得生成时间;

4.区域监测(一般不常用就不做介绍了)


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值