使用CLGeocoder反向地理编码查找当前位置

时间:2013-03-15 06:30:46

标签: iphone ipad xcode4.5 cllocationmanager clgeocoder

我想根据纬度和经度找到用户的当前位置。 Prevoiusly我使用MKReverseGeocoder完成了它,但由于它在ios5中被删除,我使用CLGeocoder.But无法获取当前位置。

- (void)viewDidLoad
{
 locationManager = [[CLLocationManager alloc] init];
        [locationManager setDelegate:self];
        [locationManager setDistanceFilter:kCLDistanceFilterNone];
        [locationManager setDesiredAccuracy:kCLLocationAccuracyBest];
        [locationManager startUpdatingLocation];

}
- (void)locationManager:(CLLocationManager *)manager
    didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation {
    CLLocation *currentLocation = newLocation;

    locationLabelOne=newLocation.coordinate.latitude;


    locationLabelTwo=newLocation.coordinate.longitude;
    geocoder = [[CLGeocoder alloc] init];


    [locationManager stopUpdatingLocation];

    [geocoder reverseGeocodeLocation:currentLocation completionHandler:^(NSArray *placemarks, NSError *error) {
        NSLog(@"Found placemarks: %@, error: %@", placemarks, error);
        if (error == nil && [placemarks count] > 0) {
            placemark = [placemarks lastObject];
           NSString *get = [NSString stringWithFormat:@"%@ %@\n%@ %@\n%@\n%@",
                                 placemark.subThoroughfare, placemark.thoroughfare,
                                 placemark.postalCode, placemark.locality,
                                 placemark.administrativeArea,
                                 placemark.country];
        } else {
            NSLog(@"%@", error.debugDescription);
        }
    } ];
    NSLog(@"%@",placemark);
}

当我在NSLog地标时,它返回null。我哪里出错了?

2 个答案:

答案 0 :(得分:2)

可能的问题:

1){6.0}不推荐使用locationManager:didUpdateToLocation:fromLocation,而应使用locationManager:didUpdateLocations:代替。

 - (void)locationManager:(CLLocationManager *)manager
 didUpdateLocations:(NSArray *)locations
{
     currentLocation=[locations lastObject];
     // rest code will be same
 }

2)[locationManager stopUpdatingLocation];听起来也很可疑。 IMO你不应该在CLLocationManagerDelegate方法中使用它。

P.S。

i)有关正向/反向地理编码的更多详细信息,您可以查看Apple的示例代码GeocoderDemo

ii)如果您使用Google API进行反向地理编码,它将拥有多年可用的所有数据,但CLGeocoder将无法获得完整的数据,如街道名称,印度等国家的密码。当您执行反向地理编码请求时,会将坐标传递到核心位置,后者连接到后台的Web服务(开发人员不会知道)并返回用户可读的地址。因此,此网络服务可能无法像GOOGLE API一样准确地返回数据。

答案 1 :(得分:0)

我有同样的问题,然后通过一些实验我解决了我的问题......

确保: -90<纬度< 90 -180<经度< 180

似乎没有执行基本的mod功能。希望有所帮助...