2012-05-02 29 views
5

無論我給地理編碼器的任何地址([geocoder geocodeAddressString:completionHandler :)),它總是隻在地標數組中放置一個對象。如何從CLGeocoder獲取多個地標

我有沒有辦法獲得多個結果(如在地圖應用程序),用戶可以從中選擇一個?

回答

1

我已經對數據包進行了一些嗅探,似乎CLGeocoder沒有連接到Google的地理編碼服務,而是連接到Apple的。我也注意到,每次只有一處地標。

如果你想要更復雜的東西,你應該使用谷歌或其他地理編碼。我使用SVGeocoder (https://github.com/samvermette/SVGeocoder),它有一個非常類似於CLGeocoder的API。

+0

我們使用了http://blog.sallarp.com代替SVGeocoder – johsem

+0

正向Geaocoder爲什麼會出現這種情況?從Apple文檔:在前向地理編碼請求的情況下,如果提供的信息產生了多個可能的位置,則可能會返回多個地標對象。 – prince

+0

我想蘋果的地理編碼服務目前非常有限。我預計它會很快改變。你可以看到,蘋果只是急於擺脫對Google的依賴。 –

9

MapKit framework提供Apple的原生地理編碼服務。該框架中的重要對象是MKLocalSearch,它可以對地址進行地址解析並返回多個結果。

MKLocalSearch返回MKMapItem類型的mapItems中的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 
}];