反向地理编码当前位置

时间:2012-01-02 21:02:56

标签: objective-c cocoa-touch iphone-sdk-3.0 reverse-geocoding

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

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中已过时)。