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)