【发布时间】:2012-05-12 02:53:40
【问题描述】:
无论我为地理编码器提供什么地址 ([geocoder geocodeAddressString:completionHandler:),它总是只将一个对象放入地标数组中。
我有什么方法可以获得多个结果(例如在地图应用程序中),用户可以从中选择一个?
【问题讨论】:
无论我为地理编码器提供什么地址 ([geocoder geocodeAddressString:completionHandler:),它总是只将一个对象放入地标数组中。
我有什么方法可以获得多个结果(例如在地图应用程序中),用户可以从中选择一个?
【问题讨论】:
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
}];
【讨论】:
我对数据包进行了一些嗅探,似乎 CLGeocoder 没有连接到 Google 的地理编码服务,而是连接到 Apple 的。我还注意到我每次只从那里得到一个地标。
如果您想要更复杂的东西,您应该使用 Google 或其他地理编码。我使用SVGeocoder (https://github.com/samvermette/SVGeocoder),它的 API 与 CLGeocoder 非常相似。
【讨论】:
placemark 返回似乎仍然存在问题,尽管 iOS 6 原生地图搜索解决方案似乎实现了每个人都在寻找的东西。我想知道苹果目前正在使用什么解决方案