【问题标题】:CLGeocoder geocoding is hopelessly inaccurateCLGeocoder 地理编码非常不准确
【发布时间】:2012-07-21 19:38:05
【问题描述】:

我有一个应用程序可以进行转发地理编码(获取给定地址的坐标)以在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 地图应用程序的搜索框中会得到同样完全不准确的结果。

编辑:添加CLGeocodercode:

    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,这是不可接受的。

【问题讨论】:

  • 您应该发布您的CLGeocoder 代码。
  • @Imirak 我已经按照您的建议添加了代码,尽管我认为它并不真正相关,因为导致我出现问题的不是CLGeocode 的调用,而是它提供的结果。
  • @mluisbrown 我在澳大利亚也遇到了同样的问题。当我输入最准确的地址时,它工作正常;但是,如果我尝试一些模糊的东西,它就行不通了。
  • @Camus 是的,请参阅上面的编辑 2。看来我现在必须继续使用 Google API,直到 Apple 将其国际地图数据完善。
  • 我遇到了同样的问题,结果并不总是准确的。我正在考虑使用地图 API,但 Google 服务条款禁止在不显示 Google 地图的情况下使用这些信息(请参阅developers.google.com/maps/terms)。你是怎么做到的?谢谢

标签: iphone ios5 geocoding core-location


【解决方案1】:

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

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

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

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

【讨论】:

  • 截至今天,Apple 在美国仍无法正常工作。您在使用 Google 的地图时遇到过什么问题,但在他们的地图上没有显示吗?
  • @user523234 我对此完全没有问题。 YMMV。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-02
  • 2016-08-19
  • 2020-07-02
  • 2011-05-30
  • 2012-08-30
  • 2012-02-09
相关资源
最近更新 更多