iOS开发技巧iOS DeveloperiOS开发

定位

2016-01-11  本文已影响129人  方同学哈

前言

请求用户权限,需要在info.plist中添加两个值
NSLocationAlwaysUsageDescription
NSLocationWhenInUseUsageDescription

1.定位

@property (nonatomic,strong) CLLocationManager *manger;
// 定位管理者
- (CLLocationManager *)manger
{
    if (_manger == nil) {
        _manger = [[CLLocationManager alloc]init];
        [_manger requestWhenInUseAuthorization];
        [_manger setDesiredAccuracy:kCLLocationAccuracyBest];
        [_manger setDistanceFilter:1000];
    }
    return _manger;
}
// 判断当前设备是否支持定位服务
    if (![CLLocationManager locationServicesEnabled]) {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"温馨提示" message:@"该设备不支持定位" delegate:nil cancelButtonTitle:@"知道了" otherButtonTitles:nil, nil];
        
        [alert show];
    
    }
    
    self.manger.delegate = self;
    [self.manger startUpdatingLocation];
#pragma mark - 定位协议方法
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
{
    // 获取当前位置的经纬度
    CLLocation *location = [locations lastObject];
    
    NSLog(@"经度:%.2f  纬度:%.2f",location.coordinate.latitude,location.coordinate.longitude);
    // 如果只需获取一次,则获取到后就可以停止定位
    [self.manger stopUpdatingLocation];
}
// 定位失败
- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error
{
    NSLog(@"error:%@",[error localizedDescription]);
}

2.根据经纬度获取地名

@property (nonatomic, strong) CLGeocoder     *geocoder;
// 地理编码
- (CLGeocoder *)geocoder
{
    if (!_geocoder) {
        _geocoder = [[CLGeocoder alloc]init];
    }
    return _geocoder;
}
CGFloat next = 29.608435;
CGFloat top = 106.505997;
CLLocation *loca = [[CLLocation alloc]initWithLatitude:next longitude:top];

// 强制转换成简体中文
[[NSUserDefaults
      standardUserDefaults] setObject:[NSArray arrayWithObjects:@"zh-hans",
                                       nil, nil] forKey:@"AppleLanguages"];
[self.geocoder reverseGeocodeLocation:loca completionHandler:^(NSArray *placemarks, NSError *error) {
        
        
        for (CLPlacemark *placemark in placemarks){
            
            NSLog(@"\n name:%@\n  country:%@\n postalCode:%@\n ISOcountryCode:%@\n ocean:%@\n inlandWater:%@\n locality:%@\n subLocality:%@\n administrativeArea:%@\n subAdministrativeArea:%@\n thoroughfare:%@\n subThoroughfare:%@\n",
                  placemark.name,
                  placemark.country,
                  placemark.postalCode,
                  placemark.ISOcountryCode,
                  placemark.ocean,
                  placemark.inlandWater,
                  placemark.administrativeArea,
                  placemark.subAdministrativeArea,
                  placemark.locality,
                  placemark.subLocality,
                  placemark.thoroughfare,
                  placemark.subThoroughfare
                  
                  );
    }
}];
上一篇 下一篇

猜你喜欢

热点阅读