反向地理编码当前位置

sav*_*oob 5 cocoa-touch objective-c iphone-sdk-3.0 reverse-geocoding

是否可以在SDK 3.x上反转Geocode当前位置?我需要简单地获取当前位置的邮政编码.我见过的唯一例子是使用CoreLocation,我不认为它是在SDK 4之前引入的.

luk*_*war 10

您可以使用3.0到5.0之间的MKReverseGeocoder.由于推荐使用5.0 MKReverseGeocoder,因此建议使用CLGeocoder.

如果可用,您应该使用CLGeocoder.为了能够提取地址信息,您必须包含地址簿框架.

#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
}
Run Code Online (Sandbox Code Playgroud)

MKReverseGeocoder委托方法:

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

MKReverseGeocoder和ABPersonAddressZIPKey在iOS 9.0中已弃用.相反,该postalcode属性CLPlacemark可用于获取邮政编码:

NSString * zipCode = placemark.postalCode;
Run Code Online (Sandbox Code Playgroud)