Обратное геокодирование Текущее местоположение - PullRequest
5 голосов
/ 03 января 2012

Возможно ли изменить геокодирование вашего текущего местоположения в SDK 3.x? Мне нужно просто получить почтовый индекс текущего местоположения. Единственные примеры, которые я видел, используют CoreLocation, который, я думаю, не был представлен до SDK 4.

Ответы [ 4 ]

10 голосов
/ 03 января 2012

Вы можете использовать MKReverseGeocoder от 3.0 до 5.0. Начиная с 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 свойство CLPlacemark может быть использовано для получения почтового индекса:

NSString * zipCode = placemark.postalCode;
0 голосов
/ 03 января 2012

В вопросе есть пример кода о том, как получить широту и долготу. Получение странного вывода в обратном геокодере в iphone dev

0 голосов
/ 03 января 2012

CoreLocation был доступен в SDK 3 (начиная с 2.0), но CLGeocoder (который предоставляет обратный геокод) был доступен с 5.0.
К счастью, инфраструктура MapKit имеет объект MKReverseGeocoder.Этот объект также обеспечивает обратное геокодирование (но в SDK 5 оно устарело).

0 голосов
/ 03 января 2012

Взгляните на http://www.geonames.org. Он не встроен ни в один SDK.

...