定位CoreLocation

//添加包:CoreLocation.framework
//.plist文件:请求获得应用一直使用定位服务授权,注意使用此方法前要在info.plist中配置NSLocationAlwaysUsageDescription;请求获得应用使用时的定位服务授权,注意使用此方法前在要在info.plist中配置NSLocationWhenInUseUsageDescription,都设置为YES
手动输入

@property (nonatomic, retain) CLLocationManager *locationManager;
//地理编码/逆地理编码
@property (nonatomic, retain) CLGeocoder *geocoder;

- (void)createLocationManager
{
   
self.locationManager = [[CLLocationManager alloc] init];
   
self.geocoder = [[CLGeocoder alloc] init];
   
   
if (![CLLocationManager locationServicesEnabled]) {
       
NSLog(@"定位服务当前可能尚未打开,请设置打开");
       
return ;
    }
   
//如果没有授权则请求用户授权
   
if ([CLLocationManager authorizationStatus] == kCLAuthorizationStatusNotDetermined) {
        [
self.locationManager requestWhenInUseAuthorization];
    }
else if ([CLLocationManager authorizationStatus] == kCLAuthorizationStatusAuthorizedWhenInUse) {
       
//设置代理
       
self.locationManager.delegate = self;
       
//设置定位精度
       
self.locationManager.desiredAccuracy = kCLLocationAccuracyBest;
       
//定位频率,每隔多少米定位一次
//        CLLocationDistance distance = 1000.0;//十米定位一次
       
self.locationManager.distanceFilter = kCLDistanceFilterNone;
       
//启动跟踪定位
        [
self.locationManager startUpdatingLocation];
    }
 
}

#pragma 跟踪定位代理方法, 每次位置发生变化即执行
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)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);
   
   [self getAddressByLatitude:coordinate.latitude longitude:coordinate.longitude];
    //如果不需要实时定位,使用完即使关闭定位服务
    [
_locationManager stopUpdatingLocation];
}
//CLGeocoder类用于处理地理编码和逆地理编码(又叫反地理编码)功能.
地理编码:根据给定的位置(通常是地名)确定地理坐标(经、纬度)。
逆地理编码:可以根据地理坐标(经、纬度)确定位置信息(街道、门牌等
#pragma mark 根据坐标取得地名(逆地理编码)
-(void)getAddressByLatitude:(CLLocationDegrees)latitude longitude:(CLLocationDegrees)longitude{
   
//反地理编码
   
CLLocation *location=[[CLLocation alloc]initWithLatitude:latitude longitude:longitude];
    [
_geocoder reverseGeocodeLocation:location completionHandler:^(NSArray *placemarks, NSError *error) {
       
CLPlacemark *placemark=[placemarks firstObject];
        NSLog(@"%@", placemark.name);//位置名
        NSLog(@"thoroughfare,%@",place.thoroughfare);       // 街道
        NSLog(@"subThoroughfare,%@",place.subThoroughfare); // 子街道
       
NSLog(@"locality,%@",place.locality);               //
       
NSLog(@"subLocality,%@",place.subLocality);         //
        NSLog(@"country,%@",place.country);                 // 国家
        //字典形式输出
//        NSLog(@"详细信息:%@",placemark.addressDictionary);
    }];
}
//
原文地址:https://www.cnblogs.com/yuhaojishuboke/p/5155859.html