2012-05-02 3 views
5

Independientemente de la dirección que dé al geocodificador ([geocoder geocodeAddressString: completionHandler :), siempre coloca solo un objeto en la matriz de marcas de posición.Cómo obtener marcas de posición múltiples desde CLGeocoder

¿Hay alguna forma de obtener resultados múltiples (como en la aplicación Mapas) desde donde el usuario puede seleccionar uno?

Respuesta

1

Hice algo de olfateo en los paquetes y parece que CLGeocoder no se conecta al servicio de geocodificación de Google, sino a Apple. También he notado que solo obtengo una marca de posición cada vez.

Si desea algo más sofisticado, debe usar la codificación geográfica de Google u otra. Yo uso SVGeocoder (https://github.com/samvermette/SVGeocoder), que tiene una API muy similar a CLGeocoder.

+0

Se utilizó el delantero Geaocoder de http://blog.sallarp.com en lugar de SVGeocoder – johsem

+0

¿Por qué sucede esto? De Apple Docs: en el caso de las solicitudes de geocodificación de reenvío, se pueden devolver múltiples objetos de marcas de posición si la información proporcionada arroja múltiples ubicaciones posibles. – prince

+0

Supongo que el servicio de geocodificación de Apple es bastante limitado a partir de ahora. Yo esperaría que cambie pronto. Puedes ver que Apple está apresurándose a alejarse de la dependencia de Google aquí. –

9

El servicio de geocodificación nativo de Apple es provisto por el MapKit framework. El objeto importante en este marco es MKLocalSearch, que puede geocodificar direcciones y devolver resultados múltiples.

MKLocalSearch devuelve 10 resultados en mapItems de tipo MKMapItem. Cada MKMapItem contiene un objeto MKPlacemark, que es una subclase de CLPlacemark.

Aquí hay un ejemplo usando de MKLocalSearch 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 
}]; 
Cuestiones relacionadas