CLGeocoder地理编码准确率极低

15
我有一个应用程序,可以进行正向地理编码(根据地址获取坐标),并在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 代码。 - Imirak
@Imirak,我已经按照你的建议添加了代码,尽管我认为它并不是很相关,因为导致问题的不是CLGeocode的调用,而是它提供的结果。 - mluisbrown
@mluisbrown 我在澳大利亚这里遇到了同样的问题。当我输入最精确的地址时,它能够正常工作;但是如果我尝试一些模糊的东西,它就无法工作。 - Camus
@Camus 是的,看到我上面的EDIT 2了吗?似乎我现在必须继续使用Google API,直到苹果完善其国际地图数据。 - mluisbrown
我遇到了同样的问题,结果并不总是准确的。我在考虑使用地图API,但是Google的服务条款禁止在没有显示Google地图的情况下使用这些信息(请参见https://developers.google.com/maps/terms)。你是如何解决这个问题的?谢谢。 - M to the K
@Machine_a_coder 我知道Google Maps API的条款,但我选择无视它们并希望他们不会注意到 :) 我的应用现在仅少量使用Maps API请求。如果我被迫更改,我将切换到iOS6及以上版本的CLGeocoder - mluisbrown
1个回答

11

嗯,看来是的,苹果的CLGeocoder在正向地理编码(地址->坐标)方面的准确度远不如谷歌地图地理编码API,特别是在美国以外的地区。使用填写了尽可能多字段的地址字典比简单的地址字符串要好得多,但仍然远远不够好。谷歌通常会给出距离街道号码5-10米之内的坐标,而苹果则只会在正确的街道附近给出坐标,如果你很幸运的话。

编辑: 发现苹果开发者Technical Note TN2289,其中详细列出了CLGeocoder支持的国家/地区。葡萄牙似乎在其部分支持的地区列表中,描述为:

以下领土由于覆盖范围较小或其他原因而不受完全支持。例如,某个位置可能只能被地理编码到道路级别,而不是该道路上的特定地址点。 这与我在葡萄牙使用CLGeocoder的结果相匹配。我想我只能等待改进的覆盖范围了。

截至今天,在美国,苹果公司的仍然存在无法正常工作的事件。您在使用谷歌地图时是否遇到了显示问题? - user523234
@user523234 我完全没有遇到过任何问题。但你的情况可能会有所不同。 - mluisbrown

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接