iphone - CLGeocoder 地理编码极其不准确

标签 iphone ios5 geocoding core-location

我有一个应用程序可以进行正向地理编码(获取给定地址的坐标)以在 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公里。自由大道是里斯本最大、最著名的大道之一。相当于纽约市的第五大道。这不是一条不起眼的小巷。

我是否做错了什么才能获得如此糟糕的准确性?其他人是否也存在类似的准确性问题,尤其是美国境外的地址?

目前看来我必须坚持使用 Google Maps API。顺便说一句,我一直在使用 iOS 6 模拟器,但结果并没有更好。将相同的搜索字符串放入 iOS 6 map 应用程序的搜索框中会得到相同的完全不准确的结果。

编辑:添加了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,这是 Not Acceptable 。

最佳答案

嗯,看来是的,Apple 的 CLGeocoder 的正向地理编码(地址 -> 坐标)并不像 Google map 地理编码 API 那样准确,尤其是在美国以外的地区。使用尽可能完整填写所有字段的地址字典比简单的地址字符串效果要好得多,但它仍然不够好。 Google(通常)会为您提供街道号码 5-10m 范围内的坐标,而如果您幸运的话,Apple 则会为您提供正确街道上某处的坐标。

编辑: 找到苹果开发者Technical Note TN2289其中详细介绍了 CLGeocoder 支持的国家/地区。葡萄牙似乎在其列表中 Partially Supported Regions ,它描述为:

The following are territories are not fully supported, either because coverage is more limited or for other reasons. For example a location may only be able to be geocoded to road level as opposed to a specific address point on that road.

这与我在葡萄牙的 CLGeocoder 的结果相符。我想我只能等待改善的覆盖范围。

关于iphone - CLGeocoder 地理编码极其不准确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11614721/

相关文章:

iphone - 如何从 nsmutableArray 中删除重复数据

iphone - 将地址地理编码为 iPhone 中的坐标

angular - 使用 Angular 进行反向地理编码

geocoding - 来自经纬度位置的国家/地区代码(不使用地理编码服务)

iPhone UIWebView问题

iPhone - GDataXMLNode 和 GDataXMLElement 之间的区别以及如何使用它们

ios - navcontroller - 将导航项设置为图像

ios5 - TomSwift/TSAlertView ios 5 ARC 版本

iphone - 我的 TableView 上的删除功能似乎不起作用

iphone - 在 xib View 上拖动对象或其 Controller 有什么区别?