IOS 获取地理位置信息并逆向解析

                                  由于是初学者,思绪可能较乱,敬请见谅!

 1. 首先,将CoreLocation framework  mapkit.framework框架导入到工程当中并且引用
 2. 添加#import <CoreLocation/CoreLocation.h>
      #import <MapKit/MapKit.h>引用头文件到你写的类文件中
 3.创建一个CLLocation服务的管理者CLLocationManager,设置代理。定义为全局变量方便调用 
   @property (strong,nonatomic)CLLocationManager *locManager;

  4.实例化位置管理器并设置代理,使用startUpdatingLocation和stopUpdatingLocation来开始和结束定位


- (void)viewDidLoad
{

    [super viewDidLoad];


    self.locationManager = [[CLLocationManager alloc] init];
    self.locationManager.delegate = self;
   
    distanceFilter是距离过滤器,为了减少对定位装置的轮询次数,位置的改变不会每次都去通知委托,而是在移动了足够的距离时才通知委托程序
    它的单位是米,这里设置为至少移动1000再通知委托处理更新;

    self.locationManager.distanceFilter = 1000.0f; // 如果设为kCLDistanceFilterNone,则每秒更新一次;

    CLAuthorizationStatus status = [CLLocationManager authorizationStatus]; 
    if (status == kCLAuthorizationStatusNotDetermined) {
        // 如果授权状态还没有被决定就弹出提示框
    } else if (status == kCLAuthorizationStatusDenied) { 
        // 如果授权状态是拒绝就给用户提示
    } else if (status == kCLAuthorizationStatusAuthorizedWhenInUse || status == kCLAuthorizationStatusAuthorizedAlways) {
        // 如果授权状态可以使用就开始获取用户位置

        [self.locationManager startUpdatingLocation ];
    }

 }

    //设置定位精度
    // kCLLocationAccuracyNearestTenMeters:精度10米
    // kCLLocationAccuracyHundredMeters:精度100 米
    // kCLLocationAccuracyKilometer:精度1000 米
    // kCLLocationAccuracyThreeKilometers:精度3000米
    // kCLLocationAccuracyBest:设备使用电池供电时候最高的精度
    // kCLLocationAccuracyBestForNavigation:导航情况下最高精度,一般要有外接电源时才能使用

以下是 早期两个委托方法,一个是成功获得具体的坐标。另一个是失败时候的处理方法。

-(void)locationManager:(CLLocationManager*)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{
    
    CLLocationCoordinate2D  loc = [newLocation coordinate];

  

    经纬度信息

    float longtitude = loc.longitude;
    float latitude = loc.latitude;
    
  
    使用CLGeocoder逆向解析地址
    CLGeocoder *geocoder = [[CLGeocoderalloc] init];
    [geocoder reverseGeocodeLocation:newLocation completionHandler:^(NSArray* placemarks,NSError *error) {
         
         if (placemarks.count >0   ) {
             
             CLPlacemark * plmark = [placemarksobjectAtIndex:0];
             NSString * country = plmark.country;
             NSLog(@"%@",country); 
         }
        NSLog(@"%@",placemarks);

    }];

[self.locationManager  stopUpdatingLocation];

}


//获取信息失败处理函数
-(void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error
{
  NSlog(@"error");

 [self.locationManager  stopUpdatingLocation];

}


现在常用此方法来监视位置更新,当定位成功后调用

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

          NSLog(@"%@", locations);

这里同样是获取地理位置信息,并用使用CLGeocoder逆向解析地址,获取具体地址。再从  CLPlacemark * plmark的各个属性中获取出自己想要的信息

}

你可能感兴趣的:(ios,获取位置信息,逆向解析)