2013-07-31 1 views
2

Я должен изменить географическую координату и долготу в каком-либо месте и хочу получить адрес этого местоположения. Я сделал это через веб-сервис google, но это требует времени. Я хочу знать, есть ли другой хороший и эффективный подход.ios: Каков эффективный и рекомендуемый способ обратного геокодирования?

В настоящее время называя эту услугу,

NSString * getAddress = [NSString stringWithFormat:@"http://maps.googleapis.com/maps/api/geocode/json?latlng=%@,%@&sensor=true",Lattitude,Longitude]; 
+0

см. Мой ответ что-то вроде вашего требования по этой ссылке http://stackoverflow.com/questions/16009729/locationmanager-avoid-null-string-in-a-label/16009810#16009810 –

+0

см. Мой еще один ответ для подробной информации о местоположении из этой ссылки http://stackoverflow.com/questions/15682595/in-mkmapkit-how-to-get-the-current-location-detail-in-textfield-or-tableview/15682757#15682757 –

ответ

10

Вы можете использовать CLGeocoder:

[self.geocoder reverseGeocodeLocation:location completionHandler:^(NSArray *placemarks, NSError *error){ 
    CLPlacemark *placemark = placemarks[0]; 
    NSLog(@"Found %@", placemark.name); 
}]; 

Это будет еще время, хотя, так как оба метод использует веб-сервисы для преобразования широты/долготы в место

2

Посмотрите GLGeocoder. В частности reverseGeocodeLocation:completionHandler:

2

Вы можете использовать CLGeocoder от Apple (часть CoreLocation). В частности, метод – reverseGeocodeLocation:completionHandler:, который вернет словарь адресных данных для данных координат.

5

Попробуйте этот код.

geoCoder = [[CLGeocoder alloc]init]; 
    [self.geoCoder reverseGeocodeLocation: locationManager.location completionHandler: 

    //Getting Human readable Address from Lat long,,, 

    ^(NSArray *placemarks, NSError *error) { 
     //Get nearby address 
     CLPlacemark *placemark = [placemarks objectAtIndex:0]; 
      //String to hold address 
     NSString *locatedAt = [[placemark.addressDictionary valueForKey:@"FormattedAddressLines"] componentsJoinedByString:@", "]; 
      //Print the location to console 
     NSLog(@"I am currently at %@",locatedAt); 
    }]; 
+0

NSString * foundAt = [ [placemark.addressDictionary valueForKey: @ "FormattedAddressLines"] componentsJoinedByString: @ ","]; именно то, что я искал – LordSidious

0

Посмотрите this tutorial, или, если просто хотите что-то скопировать быстро: NSArray * addressOutput; CLLocation * currentLocation; // принимает эти переменные экземпляра

// Reverse Geocoding 
CLGeocoder *geocoder = [[CLGeocoder alloc] init]; 
[geocoder reverseGeocodeLocation:currentLocation completionHandler:^(NSArray *placemarks, NSError *error) { 
    NSLog(@"Found placemarks: %@, error: %@", placemarks, error); 
    if (error == nil && [placemarks count] > 0) { 
     NSMutableArray *tempArray = [[NSMutableArray alloc] initWithCapacity:[placemarks count]]; 
     for (CLPlacemark *placemark in placemarks) { 
      [tempArray addObject:[NSString stringWithFormat:@"%@ %@\n%@ %@\n%@\n%@", 
            placemark.subThoroughfare, placemark.thoroughfare, 
            placemark.postalCode, placemark.locality, 
            placemark.administrativeArea, 
            placemark.country]]; 
     } 
     addressOutput = [tempArray copy]; 
    } 
    else { 
     addressOutput = nil; 
     NSLog(@"%@", error.debugDescription); 
    } 
}]; 

Основе кода в учебнике.