• iOS开发-Core Location和Map Kit


    一、Core Location确定物理位置

    利用以下3种技术:

    1、GPS(最精确的)

    2、蜂窝基站ID定位(cell ID Location)

    3、WPS(Wi-Fi Positioning Service,Wi-Fi定位服务)

    这3种方法都很耗电,使用Core Location时要注意这一点,尽量只在必要时进行定位。使用时,我们可以根据需要指定精度。注意,在指定绝对最低精度级别时要谨慎,避免不必要的电力消耗。

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

    二、如何使用Core Location API?

    (一)创建位置管理器

    使用到的主类是CLLocationManager

    CLLocationManager *locationManager = [[CLLocationManager alloc] init];

    (二)设置精度

    避免指定任何大于绝对需要的精度

    精度通过设定CLLocationAccuracy的值进行指定,类型为双浮点型,单位为米(m)

    示例:

    // 设置委托

     locationManager.delegate = self;

    // 请求特定精度级别

    locationManager.desireAccuracy = KLLocationAccuracyBest;

    如果指定的desireAccuracy的值为10,就表示要求Core Location在尝试确定当前位置时尽量达到10米的精度。

    其他指定精度的方法

    KLLocationAccuracyBestForNavigation

    KLLocationAccuracyNearestTenMeters

    KLLocationAccuracyKilometer

    KLLocationAccuracyThreeKilometer

    (三)设置距离筛选器

    默认情况下,位置管理器会把检测到的位置更改通知给委托。指定距离筛选器意味着告知位置管理器不要将每个更改都通知你,仅当位置更改超过特定大小时通知。

    如设置1000米

    locationManager.distanceFilter = 1000.;

    如果希望位置管理器恢复为没有赛选器的默认设置

    locationManager.distanceFilter = KCLDistanceFilterNone;

    (四)获取使用定位服务的权限

    (五)启动位置管理器

    [locationManager startUpdatingLocation];

    (六)合理使用位置管理器

    如果只需要确定当前位置而不需要持续更新,那么获取完当前位置信息后应该让委托停止位置管理器。如果需要轮询,则需要确保在肯能的情况下停止轮询。

    [locationManager stopUpdatingLocation];

    (七)获取位置更新

    使用locationManager:didUpdateLocations方法。该方法接受两个参数

    1、调用改方法的位置管理器

    2、一个CLLocation对象数组,用于描述设备的当前位置,可能还有之前的几个位置。无论何时,数据的最后一项都表示当前位置。

    (八)使用CLLocation获取位置信息

    该类有应用可能感兴趣的6个属性:

    1、coordinate(地理坐标)—>(latitude)纬度和(longitude)纬度

    2、horizontalAccuracy(水平精度)

    3、altitude(海拔高度)

    4、verticalAccuracy(垂直精度)

    5、floor(地面)

    6、timestamp(时间戳)

    示例:

    CLLocation latitude = theLocation.coordinate.latitude;

    (九)错误通知

    如果Core Location需要向应用程序报告错误,则调用locationManager:didFailWithError:的委托方法。

    1、用户拒绝访问:调用并传递kCLErrorDenied错误代码。

    2、无法确定位置:kCLErrorLocationUnknown

    kCLErrorLocationUnknown错误表示是问题可能是临时的,而kCLErrorDenied或其他错误可能表示在当前会话的其余时间内,应用都将无法访问Core Location

    3、网络相关错误:kCLErrorNetwork

  • 相关阅读:
    如何在ASP.NET Web站点中统一页面布局[Creating a Consistent Layout in ASP.NET Web Pages(Razor) Sites]
    JS 传播事件、取消事件默认行为、阻止事件传播
    脚本化CSS类-HTML5 classList属性
    offset、client、scroll开头的属性归纳总结
    使用insertBefore实现insertAdjacentHTML()
    HTML5 数据集属性dataset
    圣杯布局与双飞翼布局
    Lazyload Angular
    MongoDB学习笔记
    HTML5调用电脑摄像头拍照
  • 原文地址:https://www.cnblogs.com/jierism/p/5745724.html
Copyright © 2020-2023  润新知