2012-05-02 3 views
5

Quelle que soit l'adresse que je donne au géocodeur ([geocoder geocodeAddressString: completionHandler :), il met toujours un seul objet dans le tableau des repères.Comment obtenir plusieurs repères de CLGeocoder

Y at-il un moyen d'obtenir plusieurs résultats (comme dans l'application Maps) à partir de laquelle l'utilisateur peut en sélectionner un?

Répondre

1

J'ai fait quelques renifleurs sur les paquets et il semble que CLGeocoder ne se connecte pas au service de géocodage de Google, mais à Apple. J'ai également remarqué que je n'obtiens qu'un seul repère à chaque fois.

Si vous voulez quelque chose de plus sophistiqué, vous devriez utiliser le géocodage Google ou autre. J'utilise SVGeocoder (https://github.com/samvermette/SVGeocoder), qui a une API très similaire à CLGeocoder.

+0

nous avons utilisé le Forward Geaocoder de http://blog.sallarp.com au lieu de SVGeocoder – johsem

+0

Pourquoi cela? A partir des Apple Docs: Dans le cas de demandes de géocodage vers l'avant, plusieurs objets de repère peuvent être renvoyés si les informations fournies ont généré plusieurs emplacements possibles. – prince

+0

Je suppose que le service de géocodage d'Apple est assez limité à partir de maintenant. Je m'attendrais à ce qu'il change rapidement. Vous pouvez voir que Apple se précipite pour s'éloigner de la dépendance sur Google ici. –

9

Le service de géocodage natif d'Apple est fourni par le MapKit framework. L'objet important dans ce cadre est MKLocalSearch, qui peut géocoder des adresses et renvoyer plusieurs résultats. MKLocalSearch renvoie 10 résultats dans mapItems de type MKMapItem. Chaque objet MKMapItem contient un objet MKPlacemark, qui est une sous-classe de CLPlacemark.

Voici un exemple en utilisant MKLocalSearch de MapKit:

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 
}]; 
Questions connexes