2011-12-15 16 views
7

Estoy tratando de usar (reenviar) la geocodificación utilizando las nuevas API CLLocationManager en iOS 5, y no estoy teniendo suerte.CLLocationManager geocodeAddressString: inRegion no funciona para restringir región (ios5)

Estoy especificando una región basada en la ubicación actual, y sin embargo me está dando resultados en el otro lado del mundo.

//CLLocation *currentloc is set to the current location when I get in here (<+37.78583400,-122.40641700>) 
CLRegion *region = [[CLRegion alloc] initCircularRegionWithCenter:[currentloc coordinate] radius:5000 /*meters*/ identifier:@"You are here"]; 
// Region is now: (identifier You are here) <+37.78583400,-122.40641700> radius 5000.00m 

NSString *addressString = @"Citibank"; //for example 
[geoCoder geocodeAddressString:addressString inRegion:region completionHandler:^(NSArray* placemarks, NSError* error){ 
    for (CLPlacemark* aPlacemark in placemarks) 
    {     // Process the placemark. 
     NSLog(@"Got Placemark : %@", aPlacemark);  

    } 
}]; 

Y todo lo que consigo es:

> 2011-12-14 15:50:49.882 [12377:12503] Got Placemark : Citibank, New 
> Delhi, Delhi, India @ <+28.63470640,+77.22010140> +/- 100.00m, region 
> (identifier <+28.63517750,+77.21878050> radius 154.35) 
> <+28.63517750,+77.21878050> radius 154.35m 
> 
> 2011-12-14 15:50:49.883[12377:12503] Got Placemark : CitiBank, Noida, 
> Uttar Pradesh, India @ <+28.58157180,+77.32408380> +/- 100.00m, region 
> (identifier <+28.58161950,+77.32315050> radius 154.41) 
> <+28.58161950,+77.32315050> radius 154.41m 
> 
> 2011-12-14 15:50:49.885 [12377:12503] Got Placemark : Citibank, New 
> Delhi, Delhi, India @ <+28.53627320,+77.21128390> +/- 100.00m, region 
> (identifier <+28.53630050,+77.21054050> radius 154.46) 
> <+28.53630050,+77.21054050> radius 154.46m 
> 
> ... 

Cualquier idea:

  1. lo hace pensar que estoy en Nueva Delhi? (Creo que la respuesta es no - porque una búsqueda de "All Star Donuts" con la misma inregion me pone en Tailandia

  2. ¿estoy haciendo mal uso "inregion"

  3. hace este trabajo para cualquier persona, ya que se muy bueno si y cuando lo hace

+0

Encontré una solución a este problema utilizando el método 'geocodeAddressString: completionHandler:' en su lugar. Eche un vistazo a [mi solución] (http://stackoverflow.com/questions/10202550/clgeocoder-returning-locations-in-other-countries/13632049#13632049) a una pregunta muy similar. – msoler

Respuesta

0

Ok, respuestas.

  1. no, no es así. simplemente utiliza región en lugar de buscar en primer. A partir de la API:

    Especificación de una región le permite priorizar el conjunto devuelto de los resultados a los lugares que están cerca de un área geográfica específica, que suele ser la ubicación actual del usuario.

  2. Todo está bien.

  3. para la petición "starbucks" me devuelve

    consiguió marca de posición: Starbuck Dr, Sausalito CA 94965, Estados Unidos @ < + 37,86315000, -122.57986000> +/- 100.00m, región (identificador < 37,86315000, -122.57986000> radio 282.92) < + 37.86315000, -122.57986000> radio 282.92m

Parece que funciona.

Mi sugerencia es verificar la distancia entre el centro de su región y el centro de marcas de posición, devuelto por el servidor.

+0

Gracias - es bueno saber que funciona correctamente para usted; No pude obtener mejores resultados y pasé a utilizar la API de lugares de Google (finalmente conseguí que funcionara). Cualquier posibilidad de que pueda probar "Citibank" en lugar de Starbucks y vea si obtiene una en Sausalito (¿y no en Nueva Delhi?) – snarshad

+0

intenté buscar Citibank, los mismos resultados que los suyos –

Cuestiones relacionadas