• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
Warming浮华
博客园    首页    新随笔    联系   管理    订阅  订阅

iOS定位之CoreLocation框架介绍

一、CoreLocation在程序应用开发中使用

1、简介

CoreLocation是iOS SDK中一个提供设备位置的框架,可以使用三种技术来获取位置:GPS、蜂窝或WiFi。在这些技术中,GPS最为精准,如果有GPS硬件,CoreLocation将优先使用它。如果设备没有GPS硬件(如WiFi iPad)或使用GPS获取当前位置时失败,CoreLocation将退而求其次,选择使用蜂窝或WiFi。

2、CoreLocation框架的使用

CoreLocation的大多数功能是由位置管理器(CLLocationManager)提供的,可以使用位置管理器来指定位置更新的频率和精度,以及开始和停止接收这些更新。

(1)导入框架

在Xcode中的Gernal选项选择Frameworks条目,添加CoreLocation框架

Find

Add

(2)导入头文件

import <CoreLocation/CoreLocation.h>

(3)创建定位管理器CLLocationManager并对其进行初始化,以及相关属性的配置

CLLocationManager的常用操作和属性

开始用户定位- (void)startUpdatingLocation;

停止用户定位- (void) stopUpdatingLocation;

说明:当调用了startUpdatingLocation方法后,就开始不断地定位用户的位置,中途会频繁地调用代理的下面方法

  - (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations;

每隔多少米定位一次

  @property(assign, nonatomic) CLLocationDistance distanceFilter;

定位精确度(越精确就越耗电)

  @property(assign, nonatomic) CLLocationAccuracy desiredAccuracy;

        //创建定位管理器
        CLLocationManager * locationManager = [[CLLocationManager alloc] init];
        locationManager.delegate = self;
        /*
         extern const CLLocationAccuracy kCLLocationAccuracyBestForNavigation __OSX_AVAILABLE_STARTING(__MAC_10_7,__IPHONE_4_0); //导航定位
         
         extern const CLLocationAccuracy kCLLocationAccuracyBest; //比较精准的定位 
         extern const CLLocationAccuracy kCLLocationAccuracyNearestTenMeters; //精确度10米以内
         extern const CLLocationAccuracy kCLLocationAccuracyHundredMeters;
         extern const CLLocationAccuracy kCLLocationAccuracyKilometer;
         extern const CLLocationAccuracy kCLLocationAccuracyThreeKilometers;
         */
        //定位的精确度,精确度越高越耗电
        locationManager.desiredAccuracy = kCLLocationAccuracyBest;
        //定位的更新频率,单位为米
        locationManager.distanceFilter = 5;

(4)打开服务器并开启定位

iOS8.0之后开启定位需要执行requestAlwaysAuthorization/requestWhenInUseAuthorization,而且还要配置info.plist。NSLocationAlwaysUsageDescription / NSLocationWhenInUseUsageDescription

    //判断定位服务是否打开
    if (![CLLocationManager locationServicesEnabled]) {
        
        NSLog(@"提示用户打开定位服务");
    } else {
        
        //获取当前定位的状态
        CLAuthorizationStatus status = [CLLocationManager authorizationStatus];
        //如果定位状态为未打开
        if (status == kCLAuthorizationStatusNotDetermined) {
            //requestWhenInUseAuthorization  前端定位
            //requestAlwaysAuthorization 前端和后台定位
            [self.manager requestWhenInUseAuthorization];
            //[self.manager requestAlwaysAuthorization];
        }
        //开启定位
        [self.manager startUpdatingLocation];
        
    }

(5)定位信息类CLLocation

CLLocation用来表示某个位置的地理信息,比如经纬度、海拔等等

(1)经纬度

  @property(readonly, nonatomic) CLLocationCoordinate2D coordinate;

(2)海拔

  @property(readonly, nonatomic) CLLocationDistance altitude;   

- (void)locationManager:(CLLocationManager *)manager
     didUpdateLocations:(NSArray<CLLocation *> *)locations {
    
    //当定位成功后,这个代理只需执行一次,所有停止位置更新
    [manager stopUpdatingLocation];
    //获取定位信息
    CLLocation * location = [locations lastObject];
    //获取经纬度
    CLLocationCoordinate2D coordinate = location.coordinate;
    
    NSLog(@"经度为:%f,纬度为:%f",coordinate.longitude,coordinate.latitude);

(6)调试

因为不是真机,模拟器在运行的时候,可以自定义的设置其自身所在的位置

Find

Result

posted @ 2016-03-29 22:55  Warming浮华  阅读(418)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3