iPhone - Obtenha o nome da cidade a partir de Latitude e Longtiude
Quero o nome da minha cidade atual no meu aplicativo para iPhone.
Eu estou atualmente recebendo a latitude e longitude usando CLLocationManager e do que eu estou passando minhas coordenadas em CLGeocoder.
<code> CLGeocoder * geoCoder = [[CLGeocoder alloc] init]; [geoCoder reverseGeocodeLocation:location completionHandler:^(NSArray *placemarks, NSError *error) { for (CLPlacemark * placemark in placemarks) { UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Current City" message:[NSString stringWithFormat:@"Your Current City:%@",[placemark locality]] delegate:self cancelButtonTitle:@"OK" otherButtonTitles:@"Cancel", nil]; [alert show]; } }]; </code>
Isso está funcionando bem no iOS 5.0, mas não funciona no iOS 4.3.
Como alternativa, comecei a usar o serviço da Web do Google
<code>-(void)findLocationFor:(NSString *)latitudeStr andLontitude:(NSString *)longtitudeStr{ if ([self connectedToWiFi]){ float latitude = [latitudeStr floatValue]; float longitude = [longtitudeStr floatValue]; NSMutableDictionary *parameters = [NSMutableDictionary dictionaryWithObjectsAndKeys: [NSString stringWithFormat:@"%f,%f", latitude, longitude], @"latlng", nil]; NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://maps.googleapis.com/maps/api/geocode/json"]]; [parameters setValue:@"true" forKey:@"sensor"]; [parameters setValue:[[NSLocale currentLocale] objectForKey:NSLocaleLanguageCode] forKey:@"language"]; NSMutableArray *paramStringsArray = [NSMutableArray arrayWithCapacity:[[parameters allKeys] count]]; for(NSString *key in [parameters allKeys]) { NSObject *paramValue = [parameters valueForKey:key]; [paramStringsArray addObject:[NSString stringWithFormat:@"%@=%@", key, paramValue]]; } NSString *paramsString = [paramStringsArray componentsJoinedByString:@"&"]; NSString *baseAddress = request.URL.absoluteString; baseAddress = [baseAddress stringByAppendingFormat:@"?%@", paramsString]; [request setURL:[NSURL URLWithString:baseAddress]]; NSError *error = nil; NSURLResponse *response = nil; NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; if (response == nil) { if (error != nil) { } } else { NSDictionary *responseDict = [returnData objectFromJSONData]; NSArray *resultsArray = [responseDict valueForKey:@"results"]; NSMutableArray *placemarksArray = [NSMutableArray arrayWithCapacity:[resultsArray count]]; for(NSDictionary *placemarkDict in resultsArray){ NSDictionary *coordinateDict = [[placemarkDict valueForKey:@"geometry"] valueForKey:@"location"]; float lat = [[coordinateDict valueForKey:@"lat"] floatValue]; float lng = [[coordinateDict valueForKey:@"lng"] floatValue]; NSMutableDictionary *dict = [[NSMutableDictionary alloc] init]; [dict setObject:[NSString stringWithFormat:@"%.f",lat] forKey:@"latitude"]; [dict setObject:[NSString stringWithFormat:@"%.f",lng] forKey:@"longitude"]; [dict setObject:[placemarkDict objectForKey:@"formatted_address"] forKey:@"address"]; [placemarksArray addObject:dict]; [dict release]; } NSDictionary *placemark = [placemarksArray objectAtIndex:0]; } } } </code>
Mas a resposta que estou recebendo é muito longa, significa que ainda não consigo obter o nome da cidade porque, em alguns casos, esse serviço da Web fornece todas as outras informações sobre as coordenadas que esperam o nome da cidade.
Alguém pode me ajudar por favor?