5

¿Es posible revertir Geocodificar su ubicación actual en SDK 3.x? Necesito simplemente obtener el código postal de la ubicación actual. Los únicos ejemplos que he visto utilizan CoreLocation, que no creo que se haya introducido hasta SDK 4.Geocodificación inversa Ubicación actual

Respuesta

10

Puede usar MKReverseGeocoder de 3.0 a 5.0. Desde 5.0 MKReverseGeocoder se deprecia y se recomienda el uso de CLGeocoder.

Debe usar CLGeocoder si está disponible. Para poder extraer la información de la dirección, debe incluir el marco de la libreta de direcciones. método delegado

#import <AddressBookUI/AddressBookUI.h> 
#import <CoreLocation/CLGeocoder.h> 
#import <CoreLocation/CLPlacemark.h> 

- (void)reverseGeocodeLocation:(CLLocation *)location 
{ 
    CLGeocoder* reverseGeocoder = [[CLGeocoder alloc] init]; 
    if (reverseGeocoder) { 
     [reverseGeocoder reverseGeocodeLocation:location completionHandler:^(NSArray *placemarks, NSError *error) { 
      CLPlacemark* placemark = [placemarks firstObject]; 
      if (placemark) { 
       //Using blocks, get zip code 
       NSString* zipCode = [placemark.addressDictionary objectForKey:(NSString*)kABPersonAddressZIPKey]; 
      } 
     }]; 
    }else{ 
     MKReverseGeocoder* rev = [[MKReverseGeocoder alloc] initWithCoordinate:location.coordinate]; 
     rev.delegate = self;//using delegate 
     [rev start]; 
     //[rev release]; release when appropriate 
    } 
    //[reverseGeocoder release];release when appropriate 
} 

MKReverseGeocoder:

- (void)reverseGeocoder:(MKReverseGeocoder *)geocoder didFindPlacemark:(MKPlacemark *)placemark 
{ 
    //Get zip code 
    NSString* zipCode = [placemark.addressDictionary objectForKey:(NSString*)kABPersonAddressZIPKey]; 
} 

MKReverseGeocoder y ABPersonAddressZIPKey quedaron en desuso en IOS 9.0. En cambio la propiedad de la postalcodeCLPlacemark se puede utilizar para obtener el código postal:

NSString * zipCode = placemark.postalCode; 
+0

Funcionó perfecto, gracias! – RyanG

0

Eche un vistazo a http://www.geonames.org. No está integrado en ningún SDK.

+0

Podría utilizar el iPhones ubicación actual para atar en este servicio web? – savagenoob

+0

Absolutamente. Solo proporciónale la latitud/longitud. –

0

CoreLocation estaba disponible en SDK 3 (desde 2.0) pero CLGeocoder (que proporciona geocodificación inversa) ha estado disponible desde 5.0.
Afortunadamente MapKit framework tiene el objeto MKReverseGeocoder. Este objeto también proporciona geocodificación inversa (pero está obsoleto en SDK 5).

Cuestiones relacionadas