5

Có thể đảo ngược mã hóa địa lý vị trí hiện tại của bạn trên SDK 3.x không? Tôi chỉ cần nhận mã zip của vị trí hiện tại. Các ví dụ duy nhất tôi đã nhìn thấy sử dụng CoreLocation mà tôi không nghĩ đã được giới thiệu cho đến khi SDK 4.Đảo ngược mã địa lý Vị trí hiện tại

Trả lời

10

Bạn có thể sử dụng MKReverseGeocoder từ 3.0 đến 5.0. Kể từ 5.0 MKReverseGeocoder được khấu hao và sử dụng CLGeocoder được khuyên dùng.

Bạn nên sử dụng CLGeocoder nếu có. Để có thể trích xuất thông tin địa chỉ, bạn sẽ phải bao gồm khung danh bạ. phương pháp đại biểu

#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 và ABPersonAddressZIPKey đã bị phản đối trong iOS 9.0. Thay vào đó, postalcode tài sản của CLPlacemark có thể được sử dụng để nhận được mã zip:

NSString * zipCode = placemark.postalCode; 
+0

Làm việc hoàn hảo, cảm ơn! – RyanG

0

Hãy xem http://www.geonames.org. Nó không được tích hợp vào bất kỳ SDK nào.

+0

bạn có thể sử dụng iPhone hiện tại vị trí để buộc vào webservice này? – savagenoob

+0

Tuyệt đối. Chỉ cần cung cấp vĩ độ/kinh độ. –

0

Vị trí chính có sẵn trong SDK 3 (kể từ 2.0) nhưng CLGeocoder (cung cấp mã địa lý đảo ngược) đã có từ 5.0.
May mắn thay khung MapKit có đối tượng MKReverseGeocoder. Đối tượng này cũng cung cấp mã hóa địa lý đảo ngược (nhưng đã lỗi thời trong SDK 5).

Các vấn đề liên quan