我想根据纬度和经度找到用户的当前位置。 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。我哪里出错了?
答案 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功能。希望有所帮助...