我正在尝试对字符串进行前向地理编码,它通常可以正常工作,但是对于某些位置,例如“温哥华”,它会为结果地标的位置返回 null,但它确实会返回国家、省和坐标。我什至尝试对从前向地理编码中找到的坐标进行反向地理编码,尽管没有失败,但它返回了一个不同的位置,“穆迪港”。
最奇怪的是,我尝试通过 Apple 的 Geocoder 示例代码运行 Vancouver,它运行良好。位置不会出现空值。
另外,我正在测试它,它突然开始工作,然后我再次检查它停止工作。是什么赋予了?
这是我的代码。怀疑它会有所帮助。
-(BOOL) textFieldShouldReturn:(UITextField *)textField {
CLGeocoder *geocoder = [[CLGeocoder alloc] init];
[geocoder geocodeAddressString:textField.text completionHandler:^(NSArray *placemarks, NSError *error) {
self.placemark = [[MKPlacemark alloc] initWithPlacemark:[placemarks objectAtIndex:0]];
if (error) {
NSLog(@"Geocode error %@",error.debugDescription);
[self alertForFailedGeocode];
return;
}
if (self.placemark.locality == nil || self.placemark.country == nil) {
//eg if you search "Canada" you'll get a nil locality, and the coordinate is in the middle of nowhere.
if (self.placemark.location) {
[geocoder reverseGeocodeLocation:self.placemark.location completionHandler:^(NSArray *placemarks, NSError *error) {
if (error) {
[self alertForFailedGeocode];
return;
}
self.placemark = [placemarks objectAtIndex:0];
[self alertForConfirmGeocode:[self locationStringForPlacemark:self.placemark]];
self.location = self.placemark.location;
self.isUsingCurrentLocation = FALSE;
return;
}];
return;
}
else {
NSLog(@"Geocode failed BECAUSE nil locality or country or both");
[self alertForFailedGeocode];
return;
}
}
NSLog(@"%d places found",placemarks.count);
[self alertForConfirmGeocode:[self locationStringForPlacemark:self.placemark]];
self.location = self.placemark.location;
self.isUsingCurrentLocation = FALSE;
}];
return YES;
}