CLGeocoder地理编码绝对不准确

时间:2012-07-23 14:37:14

标签: 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”,而不是Lisboa(里斯本) 。距离真实地址约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:并使用街道地址,邮政编码(邮政编码)传递地址字典,并尽可能详细地传递可能提供,它给我合理准确的坐标,但仍然具有超过400米的精度半径,这是不可接受的。

1 个答案:

答案 0 :(得分:11)

嗯,似乎是的,Apple的CLGeocoder与Google Maps Geocoding API(特别是在美国以外)的前向地理编码(地址 - >坐标)一样准确。使用地址字典,尽可能完整地填写所有字段比简单的地址字符串好很多,但它仍然没有接近足够好。谷歌将(通常)在街道号码的5-10米范围内为您提供坐标,如果您幸运的话,Apple会在右侧街道的某个地方为您提供坐标。

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

  

以下地区未得到完全支持,原因是覆盖范围较为有限或出于其他原因。例如,位置可能只能被地理编码到道路级别,而不是该道路上的特定地址点。

我的结果与葡萄牙的CLGeocoder匹配。我想我只需要等待改善覆盖范围。