【问题标题】:How to get multiple placemarks from CLGeocoder如何从 CLGeocoder 获取多个地标
【发布时间】:2012-05-12 02:53:40
【问题描述】:

无论我为地理编码器提供什么地址 ([geocoder geocodeAddressString:completionHandler:),它总是只将一个对象放入地标数组中。

我有什么方法可以获得多个结果(例如在地图应用程序中),用户可以从中选择一个?

【问题讨论】:

    标签: core-location clgeocoder


    【解决方案1】:

    Apple 的本地地理编码服务由MapKit framework 提供。这个框架中的重要对象是MKLocalSearch,它可以对地址进行地理编码并返回多个结果。

    MKLocalSearch 返回 mapItems 类型为 MKMapItem 的 10 个结果。每个 MKMapItem 都包含一个MKPlacemark 对象,它是CLPlacemark 的子类。

    这是一个使用 MapKit 的 MKLocalSearch 的示例:

    MKLocalSearchRequest* request = [[MKLocalSearchRequest alloc] init];
    request.naturalLanguageQuery = @"Calgary Tower";
    request.region = MKCoordinateRegionMakeWithDistance(loc, kSearchMapBoundingBoxDistanceInMetres, kSearchMapBoundingBoxDistanceInMetres);
    
    MKLocalSearch* search = [[MKLocalSearch alloc] initWithRequest:request];
    [search startWithCompletionHandler:^(MKLocalSearchResponse *response, NSError *error) {
       yourArray = response.mapItems; // array of MKMapItems
       // .. do you other logic here  
     }];
    

    【讨论】:

      【解决方案2】:

      我对数据包进行了一些嗅探,似乎 CLGeocoder 没有连接到 Google 的地理编码服务,而是连接到 Apple 的。我还注意到我每次只从那里得到一个地标。

      如果您想要更复杂的东西,您应该使用 Google 或其他地理编码。我使用SVGeocoder (https://github.com/samvermette/SVGeocoder),它的 API 与 CLGeocoder 非常相似。

      【讨论】:

      • 为什么会这样?来自 Apple Docs:在前向地理编码请求的情况下,如果提供的信息产生多个可能的位置,则可能会返回多个地标对象。
      • 我想 Apple 的地理编码服务目前还很有限。我希望它很快就会改变。您可以在这里看到,Apple 正急于摆脱对 Google 的依赖。
      • 这很有趣,因为来自 CLGeocoder 的多个 placemark 返回似乎仍然存在问题,尽管 iOS 6 原生地图搜索解决方案似乎实现了每个人都在寻找的东西。我想知道苹果目前正在使用什么解决方案
      • SVGeocoder 使用谷歌地理编码器服务,如果不顺便在谷歌地图上显示结果,您就无法使用。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-14
      • 2016-01-11
      • 2021-11-28
      • 1970-01-01
      • 2012-11-02
      • 1970-01-01
      相关资源
      最近更新 更多