ios 获取用户的位置



//
//  ViewController.m
//  CoreLocation
//
//  Created by hq on 16/5/17.
//  Copyright © 2016年 hanqing. All rights reserved.
//

#import "ViewController.h"
#import <CoreLocation/CoreLocation.h>

@interface ViewController ()<CLLocationManagerDelegate>

@property(nonatomic,strong) CLLocationManager *clm;

@property(nonatomic,strong) CLLocation *oldLocation;

- (IBAction)getLocation;

@end

@implementation ViewController

-(CLLocationManager *)clm{
    
    if (_clm==nil) {
        _clm=[[CLLocationManager alloc]init];
        _clm.delegate=self;
        
        //定位精度
        /*
         每隔多米定位一次
         _clm.distanceFilter = 100;

         kCLLocationAccuracyBestForNavigation // 最适合导航
         kCLLocationAccuracyBest; // 最好的
         kCLLocationAccuracyNearestTenMeters; // 10m
         kCLLocationAccuracyHundredMeters; // 100m
         kCLLocationAccuracyKilometer; // 1000m
         kCLLocationAccuracyThreeKilometers; // 3000m
         
         */
        
        // 精确度越高, 越耗电, 定位时间越长
        _clm.desiredAccuracy=kCLLocationAccuracyBest;
        
        //如果系统是ios 8.0以上
        if ([[UIDevice currentDevice].systemVersion floatValue]>=8.0) {
            
            //只有在使用的时候获取位置,在infor.plist需要配置文案NSLocationWhenInUseUsageDescription
            //[_clm requestWhenInUseAuthorization];
            
            //获取永久位置,在infor.plist需要配置文案NSLocationAlwaysUsageDescription
            [_clm requestAlwaysAuthorization];
            
        }
        
        //如果系统是ios 9.0
        if ([[UIDevice currentDevice].systemVersion floatValue]>=9.0) {
            _clm.allowsBackgroundLocationUpdates=YES;
        }
    }

    return _clm;
}

- (void)viewDidLoad {
    [super viewDidLoad];
    
}

//获取位置
- (IBAction)getLocation {
    
    [self.clm startUpdatingLocation];
    
    //[self.clm requestLocation];
    
    //[self.clm stopUpdatingLocation];
    
}


//实现代理中的监听方法
-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations{
    
    /**
     *  CLLocation 详解
     *  coordinate : 经纬度
     *  altitude : 海拔
     *  course : 航向
     *  speed ; 速度
     */
    
    CLLocation *location=locations.lastObject;
    
    //获取经度纬度
    CLLocationCoordinate2D coordinate=location.coordinate;
    
    //获取行向(偏转角度)
    CLLocationDirection direction=location.course;
    
    
    NSString *dirString=nil;
    
    switch ((NSInteger)(direction)/90) {
        case 0:
            dirString=@"北偏东";
            break;
            
        case 1:
            dirString=@"东偏南";
            break;
            
            
        case 2:
            dirString=@"南偏西";
            break;
            
        case 3:
            dirString=@"西偏北";
            break;
    }
    
    //获取偏转的角度
    NSInteger angle=(NSInteger)(direction)%90;
    
    //判断是不是正北正南
    if (angle==0) {
        
        NSRange range=NSMakeRange(0, 1);
        dirString=[dirString substringWithRange:range];
    }
    
    
    double distance=0;
    
    if (self.oldLocation) {
        //获取移动的距离
        distance=[location distanceFromLocation:self.oldLocation];
    }
    
    self.oldLocation=location;
    
    NSLog(@"方向:%@ %ld度,走了%f",dirString,angle,distance);
    
    //NSLog(@"定位成功%ld--经度:%f  纬度: %f",locations.count,coordinate.longitude,coordinate.latitude);

}

//监听授权状态
-(void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status{
    
    switch (status) {
        case kCLAuthorizationStatusNotDetermined:
            NSLog(@"用户尚未选择");
            break;
            
        case kCLAuthorizationStatusRestricted:
            NSLog(@"反问首先");
            break;
            
        case kCLAuthorizationStatusDenied:
            
            //这种情况下,又分为两种情况
            //1 定位关闭,地理位置不可用
            if (![CLLocationManager locationServicesEnabled]) {
                NSLog(@"用户未开启定位功能");
            }
            else{
                NSLog(@"用户拒绝授权");
            }
            
            break;
            
        case kCLAuthorizationStatusAuthorizedAlways:
            NSLog(@"获的永久授权");
            break;
            
        case kCLAuthorizationStatusAuthorizedWhenInUse:
            NSLog(@"只有在使用时获得授权");
            break;
    }
}

-(void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error{
    
    NSLog(@"定位失败");
}


- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    
}

@end


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值