iOS 地图的相关知识《一》


              定位管理器


在处理相关地图的时候,有可能遇到一些问题,比如初次时候的时候,没有弹出地图的提示框,或者没有网络,或者没有显示地图

下面是相关的处理:

/*相关的博客http://my.oschina.net/are1OfBlog/blog/420034#OSC_h1_1

1. 要实现地图、导航功能,往往需要先熟悉定位功能,在iOS中通过Core Location框架进行定位操作。

2. Core Location自身可以单独使用,和地图开发框架MapKit完全是独立的,但是往往地图开发要配合定位框架使用。

3. Core Location中主要包含了定位、地理编码(包括反编码)功能。

 

iOS8中配置配置项发生了变化,可以通过配置

        NSLocationAlwaysUsageDescription

        或者 NSLocationWhenInUseUsageDescription

 来告诉用户使用定位服务的目的,并且注意这个配置是必须的,如果不进行配置则默认情况下应用无法使用定位服务,打开应用不会给出打开定位服务的提示,除非安装后自己设置此应用的定位服务。

 同时,在应用程序中需要根据配置对requestAlwaysAuthorizationlocationServicesEnabled方法进行请求。由于本人机器已经更新到最新的iOS8.1下面的内容主要针对iOS8,使用iOS7的朋友需要稍作调整。

 

还有网络的相关设置

 */



/**

 设置地图的时候 一定要在plist文件里面去设置属性:NSLocationAlwaysUsageDescription NSLocationWhenInUseUsageDescription 

 以及网络属性的设置

 */

//定位管理器

1.首先导入头文件

#import <CoreLocation/CoreLocation.h>//定位

2.声明熟悉

CLLocationManager *_locationManager;//定位管理器

3.设置代理

<CLLocationManagerDelegate>


- (void)positionOfMap

{

    //定位管理器

    _locationManager=[[CLLocationManager alloc]init];

    

    //+ (BOOL)locationServicesEnabled 是否启用定位服务,通常如果用户没有启用定位服务可以提示用户打开定位服务

    if (![CLLocationManager locationServicesEnabled]) {

        NSLog(@"定位服务当前可能尚未打开,请设置打开!");

        return;

    }

    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0) {

        

        [_locationManager requestWhenInUseAuthorization];  //调用了这句,就会弹出允许框了.

    }

    /*

     + (CLAuthorizationStatus)authorizationStatus;

     定位服务授权状态,返回枚举类型:

     

     kCLAuthorizationStatusNotDetermined 用户尚未做出决定是否启用定位服务

     kCLAuthorizationStatusRestricted 没有获得用户授权使用定位服务,可能用户没有自己禁止访问授权

     kCLAuthorizationStatusDenied :用户已经明确禁止应用使用定位服务或者当前系统定位服务处于关闭状态

     kCLAuthorizationStatusAuthorizedAlways 应用获得授权可以一直使用定位服务,即使应用不在使用状态

     kCLAuthorizationStatusAuthorizedWhenInUse 使用此应用过程中允许访问定位服务

     */

    //如果没有授权则请求用户授权

    if ([CLLocationManager authorizationStatus]==kCLAuthorizationStatusNotDetermined){

        [_locationManager requestWhenInUseAuthorization];

        

    }else if([CLLocationManager authorizationStatus]==kCLAuthorizationStatusAuthorizedWhenInUse){

        //设置代理

        _locationManager.delegate=self;

        //设置定位精度

        _locationManager.desiredAccuracy=kCLLocationAccuracyBest;

        //定位频率,每隔多少米定位一次

        CLLocationDistance distance=10.0;//十米定位一次

        _locationManager.distanceFilter=distance;

        //启动跟踪定位

        [_locationManager startUpdatingLocation];//开始定位追踪,开始定位后将按照用户设置的更新频率执行

        

    }


}

#pragma mark - CoreLocation 代理

#pragma mark 跟踪定位代理方法,每次位置发生变化即会执行(只要定位到相应位置)

//可以通过模拟器设置一个虚拟位置,否则在模拟器中无法调用此方法

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

    CLLocation *location=[locations firstObject];//取出第一个位置

    CLLocationCoordinate2D coordinate=location.coordinate;//位置坐标

    NSLog(@"经度:%f,纬度:%f,海拔:%f,航向:%f,行走速度:%f",coordinate.longitude,coordinate.latitude,location.altitude,location.course,location.speed);

    //如果不需要实时定位,使用完即使关闭定位服务

    [_locationManager stopUpdatingLocation];//停止定位追踪

    

    

}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值