2012-05-02 6 views
5

ジオコーダに与えたアドレス([geocoder geocodeAddressString:completionHandler :)]は、常に目印アレイに1つのオブジェクトしか配置されません。CLGeocoderから複数の目印を取得する方法

私はそこからユーザーが1つを選択できる複数の結果(マップアプリのような)を得る方法はありますか?

答えて

1

私はパケットを盗聴しましたが、CLGeocoderはGoogleのジオコーディングサービスに接続するのではなく、Appleのものに接続するようです。私は毎回そこから目印を1つしか得られないことにも気づいた。

もっと洗練されたものをお望みなら、Googleなどのジオコーディングを使用する必要があります。私はSVGeocoder (https://github.com/samvermette/SVGeocoder)を使用しています。これは、CLGeocoderと非常によく似たAPIを持っています。

+0

たちはなぜこれが起こるんhttp://blog.sallarp.com代わりSVGeocoder – johsem

+0

のから前方Geaocoderを使用? Apple Docsから:前方ジオコーディングリクエストの場合、提供された情報が複数の可能な場所をもたらした場合、複数の目印オブジェクトが返されることがあります。 – prince

+0

アップルのジオコーディングサービスは今のところかなり制限されていると思います。私はそれがすぐに変わると期待します。あなたは、AppleがここでGoogleへの依存から離れようと急いでいることが分かります。 –

9

アップルのネイティブジオコーディングサービスはMapKit frameworkで提供されています。このフレームワークの重要なオブジェクトはMKLocalSearchであり、アドレスをジオコーディングして複数の結果を返すことができます。

MKLocalSearchはの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 
}];