CoreLocation框架的使用

//地理编码类
//1、用来根据地名来解析当前的经纬度和其他一些附属消息
//2、根据经纬度来解析地名和其他消息

@interface ViewController ()<MKMapViewDelegate, CLLocationManagerDelegate>
@property (weak, nonatomic) IBOutlet MKMapView *mapView;

/*  地理编码**/
@property(nonatomic,strong)CLGeocoder* coder;

@property(nonatomic,strong)CLLocationManager* locationManager;


@end

@implementation ViewController

-(CLGeocoder *)coder{
    if(_coder==nil){
        _coder=[[CLGeocoder alloc] init];
    }
    return _coder;
}
-(CLLocationManager *)locationManager{
    if(_locationManager==nil){
        _locationManager=[[CLLocationManager alloc] init];
    }
    return _locationManager;
}

- (void)viewDidLoad {
    [super viewDidLoad];
    
    
    //ios8,获取用户位置,需要注册,否则报错Trying to start MapKit location updates without prompting for location authorization. Must call -[CLLocationManager requestWhenInUseAuthorization] or -[CLLocationManager requestAlwaysAuthorization] first.
    //请求认证
    if([[UIDevice currentDevice].systemVersion floatValue]>8.0){
         [self.locationManager requestWhenInUseAuthorization ];//使用requestWhenInUseAuthorization也可以
    }
   
    
    //设置地图类型
    self.mapView.mapType = MKMapTypeStandard;
    
    
    self.mapView.delegate = self;
    
    //获取用户位置,需要注册
    self.mapView.userTrackingMode = MKUserTrackingModeFollow;
    
    

    
}

#pragma mark - 地理编码和反地理编码
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
    /*  1>地理编码**/
    //    烟台----37.4749,121.456
    
    
    NSString* address=@"烟台大学";
    [self.coder geocodeAddressString:address completionHandler:^(NSArray *placemarks, NSError *error) {
        NSLog(@"%ld",placemarks.count);////设置一下模拟器的语言就可以打印中文的。
        for(CLPlacemark* p in placemarks){
            NSLog(@"%@,%@,%@",p.locality,p.thoroughfare,p.name);
            NSLog(@"%g,%g",p.location.coordinate.latitude,p.location.coordinate.longitude);
        }
    }];
    
    
    
    
    
    /*  2>反地理编码**/
    
    CLLocation* location=[[CLLocation alloc] initWithLatitude:37.4749 longitude:121.456];//需要的CLLocationDegrees类型实质就是double
    [self.coder reverseGeocodeLocation:location completionHandler:^(NSArray *placemarks, NSError *error) {
        for(CLPlacemark* p in placemarks){
            NSLog(@"%@,%@,%@",p.name,p.locality,p.thoroughfare);
        }
    }];
    
 }

//MKMapView代理方法更改地图提示的文字
- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation
{
    userLocation.title = @"北京";
    userLocation.subtitle = @"jjjjjjj";
}

//CLLocationManager代理方法
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
{
    for (CLLocation * lo in locations)
    {
        NSLog(@"%g, %g", lo.coordinate.latitude,lo.coordinate.longitude);
        
    }
    
    [self.locationManager stopUpdatingLocation];
}

猜你喜欢

转载自blog.csdn.net/GuodongSun0/article/details/46915935