编程

当前位置:澳门新莆京娱乐官网 > 编程 > CoreLocation(定位)澳门新莆京娱乐官网

CoreLocation(定位)澳门新莆京娱乐官网

来源:http://www.drgigabytes.com 作者:澳门新莆京娱乐官网 时间:2020-04-15 13:47
  • 在移动互联网时代,移动app能解决用户的很多生活琐事,比如

    • 导航:去任意陌生的地方
    • 周边:找餐馆,找酒店,找银行,找电影院
  • 在上述应用中都用到了地图定位功能,在iOS开发中,要想加入这2大功能,必须基于2个框架进行开发

    • Map Kit :用于地图展示
    • Core Location:用于地理定位
  • 两个专业术语:

    • LBS :Location Based Service
    • SoloMo : Social Local mobile
  • CoreLocation框架使用的前提

  • 导入框架(需要注意的Xcode5以后不需要手动导入,以前需要手动导入)

  • 导入头文件 #import <CoreLocation/CoreLocation.h>

  • 1.CoreLocation框架使用须知

  • 2.CoreLocation框架中所有的数据类型的前缀都是CL

  • 3.CoreLocation 中使用CLLocationManger 对象来做用户定位

题外话:

对于上面其他的一些设置

1.设置获取位置的精确度如:self.locationManger.distanceFilter = kCLLocationAccuracyNearestTenMeters; kCLLocationAccuracyBestForNavigation kCLLocationAccuracyBest; kCLLocationAccuracyNearestTenMeters; kCLLocationAccuracyHundredMeters; kCLLocationAccuracyKilometer; kCLLocationAccuracyThreeKilometers;2.设置多久距离获取一次locationself.locationManger.distanceFilter = 500; //filter |ˈfɪltə 过滤

CoreLocation(定位)澳门新莆京娱乐官网。3.何时开启定位?

 -locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status{/* //1.用户从未选择过授权 kCLAuthorizationStatusNotDetermined = 0 //2.无法使用定位服务,该状态用户无法改变 kCLAuthorizationStatusRestricted //3.用户拒绝该应用定服务,或是定位服务总开关出于关闭状态 kCLAuthorizationStatusDenied //4.已经授权 kCLAuthorizationStatusAuthorized //5.用户允许该程序无论何时都可以使用地理信息 kCLAuthorizationStatusAuthorizedAlways //6.用户同意程序在可见时使用地理位置 kCLAuthorizationStatusAuthorizedWhenInUse ****"最主要是后两个:定位成功"****** */ if (status == kCLAuthorizationStatusNotDetermined) { NSLog(@"等待用户授权"); }else if (status == kCLAuthorizationStatusAuthorizedAlways || status == kCLAuthorizationStatusAuthorizedWhenInUse) { NSLog; //4.开始监听 [self.locationManger startUpdatingLocation]; NSLog; }else { NSLog; }}

latitude |ˈlætɪtjuːd, American -tuːd| 纬度longitude |ˈlɒndʒɪtjuːd, American ˈlɔːndʒɪtuːd| 经度degree |dɪˈgriː| 度coordinate |kəʊˈɔːdɪnət |noun 坐标

 //7.监听定位信息-locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations{ CWLog(@"%s",__func__);//8.获取CLLocation对象(获取用户最后一次的位置)/* location.coordinate; 坐标,包含经纬度 location.altitude;设置海拔高度,单位是米 location.course;设置前进方向 0表示北 90东 180南 270西 location.horizontalAccuracy; 水平精准度 location.verticalAccuracy; 垂直精准度 location.timeatamp;定位信息返回的时间 location.speed; 设备移动速度 单位是米/秒 ,适于行车速度而不太适于步行 */ /* 可以设置模拟器的速度 bicycle ride 骑车速度 run 跑步 freeway drive 告诉公路驾车 */CLLocation *location = [locations lastObject];NSLog(@"经度=%f 纬度=%f speed = %f",location.coordinate.latitude,location.coordinate.longitude,location.speed);//如果只需要获取一次,可以获取到位置之后就停止 //[self.locationManager stopUpdatingLocation]; CWLog;}
  • 1.开始用户定位-startUpdatingLocation;

  • 2.停止用户定位-stopUpdatingLocation;

  • 当用户调用了startUpdatingLocation的方法之后,就开始不断地定位用户的位置,中途会频繁的调用代理的下面方法-locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations

location 参数里面装着CLLocation的对象

澳门新莆京娱乐官网 1CLLocation的一些属性

声明

//上一次的位置@property(nonatomic,strong)CLLocation *previousLocation;//previous |ˈpriːvɪəs| 先前的//计算总的距离@property(nonatomic,assign)CLLocationDistance sumDistance;//记录总时间@property(nonatomic,assign)NSTimeInterval sumTime;

方法的实现

 //6.定位调用-locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations{CWLog(@"定位信息打印");/* CLLocation 属性 timestap 获取到当前位置信息的时间 *//* 获取走了多远(用这一次的位置减去上一次的时间) 获取走这段路花了多长时间(这一次的时间减去上一次的时间) 获取速度(走了多远 / 花了多少时间) 获取总共走的路程 (把每次获取到走了多远累加起来) 获取平均速度 (总路程 / 总时间) */CLLocation *newlocation = [locations lastObject];if (self.previousLocation != nil) { //计算两次的距离 CLLocationDistance distance = [newlocation distanceFromLocation:self.previousLocation]; //计算两次之间的时间 NSTimeInterval dTime = [newlocation.timestamp timeIntervalSinceDate:self.previousLocation.timestamp]; //计算速度 CGFloat speed = distance/dTime; CWLog(@"距离=%f 时间=%f 速度=%f ",distance,dTime,speed); //累加时间 self.sumTime += dTime; //累加距离 self.sumDistance += distance; //计算平均速度 CGFloat averangeSpeed = self.sumDistance/self.sumTime; CWLog(@"两次之间的距离=%f 时间=%f 当前速度=%f 全程时间= %f 全程距离= %f 全程的平均速度 = %f",distance,dTime,speed,self.sumTime,self.sumDistance,averangeSpeed); } //记录上一次的位置 self.previousLocation = newlocation;}

提示:

CLLocationDistance distance = [newlocation distanceFromLocation:self.previousLocation];很重要获取两个位置之间的距离
  • ### 最主要的5澳门新莆京娱乐官网,步(不要怕,很简单,相信我,试着敲下来)

    1.创建CoreLocation 管理者(最好采用懒加载,管理者对象永远不死)

    -(CLLocationManager *)locationManger{ if (!_locationManger) { //1.创建CoreLocation 管理者 _locationManger = [[CLLocationManager alloc]init]; } return _locationManger;}
    

    2.成为CoreLocation 管理者的代理监听获取到的位置

     self.locationManger.delegate = self;
    

    3.定位授权,还需要在在info.plist里面进行配置(仅仅在大于等于ios8里面才要求用户主动授权,这是出于对安全性的要求)

     //授权 if ([[UIDevice currentDevice].systemVersion doubleValue] >= 8.0) { NSLog; //主动要求用户对我们的程序授权,授权状态改变就会通知代理 [self.locationManger requestAlwaysAuthorization];//请求前台和后台定位权限 //[self.locationManger requestWhenInUseAuthorization];//请求前台定位权限}else { NSLog(@"不是iOS8"); }
    
[self.locationManger startUpdatingLocation];NSLog;
 /** 获取到位置信息之后就会被调用** @param manger 触发事件的对象** @param locations 获取到的位置*///这步操作是很耗电的(一定要设置定位暂停)-locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations{ NSLog(@"%s",__func__); [self.locationManger stopUpdatingLocation]; NSLog;}

** 配置的方法:点击 requestAlwaysAuthorization **

澳门新莆京娱乐官网 2*配置的方法*

4.开始监听

5.实现代理方法

本文由澳门新莆京娱乐官网发布于编程,转载请注明出处:CoreLocation(定位)澳门新莆京娱乐官网

关键词:

上一篇:平缓旋转

下一篇:实现折线图