我想對字符串做一個前向地理編碼,它通常工作正常,但對於某些位置,如「溫哥華」,它返回null由此產生的地標,但確實會返回國家,省份和座標。我甚至嘗試了對前向地理編碼中找到的座標進行反向地理編碼,儘管沒有失敗,但它返回了一個不同的位置,「Port Moody」。在iOS中使用CLGeocoder進行前向地理編碼對於某些位置的地點返回null
最奇怪的部分是我嘗試通過蘋果公司的Geocoder示例代碼運行溫哥華,它的工作原理很好。該地區不會出現空。
此外,我正在測試它,它突然開始工作,然後我再次檢查,它停止工作。是什麼賦予了?
這是我的代碼。懷疑它會幫助很多。
-(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;
}
那麼,顯然對於加拿大本地化將是空的,但即使對於新加坡它是空的 - 這是令人討厭的 – MCKapur