我有一个应用程序可以进行转发地理编码(获取给定地址的坐标)以在MKMapView
. 该应用程序在 iOS 支持使用前向地理编码之前就已经开发好了CLGeocoder
(首先在 iOS 5 中可用)。因此,我的应用程序使用Google Maps Geocoding API,这通常非常准确。给定一个带有门牌号的完整地址,它通常会在几米内为您提供该地址的确切位置。
我正在对我的应用程序进行一些更新以支持 iOS 6,并决定从使用 Google API 切换到使用CLGeocoder
在 iOS 5 或更高版本上运行的应用程序。然而,在我的测试中(所有地址都在我居住的葡萄牙),它是如此不准确,以至于完全无法使用。
我正在使用– geocodeAddressString:completionHandler:
,例如,给定地址“Avenida da Liberdade 195, Lisboa, Portugal”,它给了我辛特拉市的“Avenida da Liberdade”,而不是里斯本(里斯本)。距离真实地址大约15公里。Avenida da Liberdade 是里斯本最大、最著名的大道之一。相当于纽约市的第五大道。这不是一条不起眼的小街。
为了获得如此可怕的准确性,我做错了什么吗?其他人是否有类似的准确性问题,尤其是美国以外的地址?
目前看来我必须坚持使用 Google Maps API。顺便说一句,我一直在使用 iOS 6 模拟器,结果也好不到哪里去。将相同的搜索字符串放入 iOS 6 地图应用程序的搜索框中会得到同样完全不准确的结果。
编辑:添加CLGeocoder
代码:
CLGeocoder *fgeo = [[[CLGeocoder alloc] init] autorelease];
NSLog(@"Geocoding for Address: %@\n", address);
[fgeo geocodeAddressString:address completionHandler:^(NSArray *placemarks, NSError *error) {
if (!error) {
// do stuff with the placemarks
for (CLPlacemark *placemark in placemarks) {
NSLog(@"%@\n %.2f,%.2f",[placemark description], placemark.location.horizontalAccuracy, placemark.location.verticalAccuracy);
}
} else {
NSLog(@"Geocoding error: %@", [error localizedDescription]);
}
}];
编辑 2:我发现,如果我使用– geocodeAddressDictionary:completionHandler:
并传入带有街道地址、邮政编码(邮政编码)和尽可能多的详细信息的地址字典,它会为我提供相当准确的坐标,但仍然具有准确性半径超过400m,这是不可接受的。