2

我想根据经纬度找到用户的当前位置。以前我已经使用 MKReverseGeocoder 完成了它,但由于它在 ios5 中已弃用,我使用 CLGeocoder。但无法获取当前位置。

- (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。我哪里出错了?

4

2 回答 2

2

可能的问题:

1) locationManager:didUpdateToLocation:fromLocation已弃用 iOS 6.0,您应该locationManager:didUpdateLocations:改用它。

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

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

附言

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

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

于 2013-03-15T07:43:15.170 回答
0

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

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

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

于 2013-11-08T20:05:22.993 回答