是否可以在SDK 3.x上反转Geocode您当前的位置?我需要简单地获取当前位置的邮政编码。我见过的唯一例子是使用CoreLocation,我认为它不会在SDK 4之前引入。
答案 0 :(得分: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
}
MKReverseGeocoder委托方法:
- (void)reverseGeocoder:(MKReverseGeocoder *)geocoder didFindPlacemark:(MKPlacemark *)placemark
{
//Get zip code
NSString* zipCode = [placemark.addressDictionary objectForKey:(NSString*)kABPersonAddressZIPKey];
}
MKReverseGeocoder和ABPersonAddressZIPKey在iOS 9.0中已弃用。相反,postalcode
的{{1}}属性可用于获取邮政编码:
CLPlacemark
答案 1 :(得分:0)
看看http://www.geonames.org。它没有内置到任何SDK中。
答案 2 :(得分:0)
在问题中,有一些关于如何获得纬度和经度的示例代码。 Getting Strange Output in Reverse Geo coder in iphone dev
答案 3 :(得分:0)
CoreLocation在SDK 3中可用(从2.0开始),但CLGeocoder(提供反向地理编码)从5.0开始提供。
幸运的是,MapKit框架具有MKReverseGeocoder对象。此对象还提供反向地理编码(但在SDK 5中已过时)。