我有一个应用程序,可以进行正向地理编码(根据地址获取坐标),并在
我正在对我的应用程序进行一些更新,以支持iOS 6,并决定在应用程序在iOS 5或以上版本上运行时从使用Google API转为使用
我正在使用
我做错了什么以致于精度如此糟糕吗?其他人是否也有类似的精度问题,尤其是在美国以外的地址?
目前看来,我将不得不坚持使用Google Maps API。顺便说一下,我一直在使用iOS 6模拟器,在那里结果也不会更好。在iOS 6地图应用程序的搜索框中输入相同的搜索字符串会给出完全不准确的结果。 编辑:添加了
MKMapView
上显示一堆图钉。该应用程序是在iOS支持正向地理编码之前开发的,当时还没有CLGeocoder
(iOS 5中首次提供)这个功能。因此,我的应用程序使用Google Maps Geocoding API,通常非常准确。给定一个带有街道号码的完整地址,它通常会在几米内给出该地址的精确位置。我正在对我的应用程序进行一些更新,以支持iOS 6,并决定在应用程序在iOS 5或以上版本上运行时从使用Google API转为使用
CLGeocoder
。然而,在我的测试中(所有地址都在我居住的葡萄牙),它的不准确性如此之高,以至于完全无法使用。我正在使用
– geocodeAddressString:completionHandler:
,例如,给定地址“葡萄牙里斯本自由大道195号”,它会在辛特拉市而非里斯本(Lisbon)给出“自由大道”(Avenida da Liberdade)。这距离实际地址约15公里。自由大道是里斯本最大、最知名的大街之一,相当于纽约第五大道。它不是某个晦涩的小巷。我做错了什么以致于精度如此糟糕吗?其他人是否也有类似的精度问题,尤其是在美国以外的地址?
目前看来,我将不得不坚持使用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:
并传入一个带有街道地址、邮政编码和尽可能多的详细信息的地址字典,它会给我相当精确的坐标,但仍然具有超过400米的精度半径,这是不可接受的。
CLGeocoder
代码。 - ImirakCLGeocode
的调用,而是它提供的结果。 - mluisbrownCLGeocoder
。 - mluisbrown