Ok, para responder a mi propia pregunta:
Como se mencionó antes, lo mejor que puede hacer es utilizar la API de Google Maps, Soporta una gran cantidad de formatos, pero por varias razones elegí ir con JSON.
Aquí están los pasos para realizar una consulta JSON a Google Maps y obtener la coordenada de la consulta. Tenga en cuenta que no todas las validaciones correctas están hechas, esto es solo una Prueba de concepto.
1) Descargue un framework/biblioteca JSON para el iPhone, hay varios, elegí ir con this one, es muy bueno y parece un proyecto activo, además de que varias aplicaciones comerciales parecen estar usándolo. Así que agréguelo a su proyecto (instrucciones here).
2) Para consultar mapas de Google para obtener una dirección que necesitamos para construir una URL de solicitud de esta manera: http://maps.google.com/maps/geo?q=Paris+France
esta URL, devolverá un objeto JSON para la consulta "París Francia +".
3) Código:
//Method to handle the UISearchBar "Search",
- (void) searchBarSearchButtonClicked:(UISearchBar *)theSearchBar
{
//Perform the JSON query.
[self searchCoordinatesForAddress:[searchBar text]];
//Hide the keyboard.
[searchBar resignFirstResponder];
}
Después manejamos la búsqueda UISearchBar, tenemos que hacer la solicitud a Google Maps:
- (void) searchCoordinatesForAddress:(NSString *)inAddress
{
//Build the string to Query Google Maps.
NSMutableString *urlString = [NSMutableString stringWithFormat:@"http://maps.google.com/maps/geo?q=%@?output=json",inAddress];
//Replace Spaces with a '+' character.
[urlString setString:[urlString stringByReplacingOccurrencesOfString:@" " withString:@"+"]];
//Create NSURL string from a formate URL string.
NSURL *url = [NSURL URLWithString:urlString];
//Setup and start an async download.
//Note that we should test for reachability!.
NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url];
NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
[connection release];
[request release];
}
Debemos, por supuesto, a continuación, manejar la respuesta del servidor de GoogleMaps (Nota: una gran cantidad de validaciones faltante)
//It's called when the results of [[NSURLConnection alloc] initWithRequest:request delegate:self] come back.
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
//The string received from google's servers
NSString *jsonString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
//JSON Framework magic to obtain a dictionary from the jsonString.
NSDictionary *results = [jsonString JSONValue];
//Now we need to obtain our coordinates
NSArray *placemark = [results objectForKey:@"Placemark"];
NSArray *coordinates = [[placemark objectAtIndex:0] valueForKeyPath:@"Point.coordinates"];
//I put my coordinates in my array.
double longitude = [[coordinates objectAtIndex:0] doubleValue];
double latitude = [[coordinates objectAtIndex:1] doubleValue];
//Debug.
//NSLog(@"Latitude - Longitude: %f %f", latitude, longitude);
//I zoom my map to the area in question.
[self zoomMapAndCenterAtLatitude:latitude andLongitude:longitude];
[jsonString release];
}
Por último la función para ampliar mi mapa, que debe por ahora, es algo trivial.
- (void) zoomMapAndCenterAtLatitude:(double) latitude andLongitude:(double) longitude
{
MKCoordinateRegion region;
region.center.latitude = latitude;
region.center.longitude = longitude;
//Set Zoom level using Span
MKCoordinateSpan span;
span.latitudeDelta = .005;
span.longitudeDelta = .005;
region.span = span;
//Move the map and zoom
[mapView setRegion:region animated:YES];
}
Espero que esto ayude a alguien porque la parte JSON fue un verdadero dolor de averiguar, la biblioteca no está muy bien documentado en mi opinión, todavía es muy buena.
EDIT:
Modificado un nombre de método para "searchCoordinatesForAddress:" debido a @Leo cuestión. Debo decir que este método es bueno como una prueba de concepto, pero si planea descargar grandes archivos JSON, tendrá que adjuntar a un objeto NSMutableData para mantener toda la consulta en el servidor de google.(Recuerda que las consultas HTTP vienen por piezas.)
preguntas y respuestas increíbles. ¡muchas gracias! – kape123
se actualiza la versión de la API de google geocoding. http://code.google.com/apis/maps/documentation/geocoding/ – seapy
Hola, pero no resuelves una situación cuando hay más de un resultado en una dirección dada si estoy leyendo correctamente tu código. – JakubM