无论我给地理编码器提供什么地址([geocoder geocodeAddressString:completionHandler :),它总是只在地标数组中放置一个对象。
我有什么方法可以获得多个结果(例如在地图应用中),用户可以从中选择一个?
答案 0 :(得分:9)
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
}];
答案 1 :(得分:3)
我对数据包进行了一些嗅探,似乎CLGeocoder没有连接到Google的地理编码服务,而是连接到Apple的。我也注意到每次只有一个地标。
如果您想要更复杂的东西,您应该使用Google或其他地理编码。我使用SVGeocoder (https://github.com/samvermette/SVGeocoder),它具有与CLGeocoder非常相似的API。