5

是否有可能將您的當前位置逆向地理編碼到SDK 3.x上?我需要簡單地獲取當前位置的郵政編碼。我見過的唯一例子是使用CoreLocation,我認爲它是在SDK 4之前推出的。逆向地理編碼當前位置

回答

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棄用。取而代之的是CLPlacemarkpostalcode屬性可以用來獲得郵政編碼:

NSString * zipCode = placemark.postalCode; 
+0

工作完美,謝謝! – RyanG 2012-08-07 15:20:04

0

看看http://www.geonames.org。它沒有內置到任何SDK中。

+0

您可以使用iPhone手機當前位置扎入這個web服務? – savagenoob 2012-01-02 21:27:03

+0

當然。只要提供它的經度/緯度。 – 2012-01-02 21:29:07

0

CoreLocation在SDK 3(自2.0開始)中可用,但CLGeocoder(提供反向地理編碼)自5.0版本開始可用。
幸好MapKit框架有MKReverseGeocoder對象。該對象還提供反向地理編碼(但在SDK 5中已過時)。