Задача
У меня есть набор информации о метках (страна, город и т. Д.) И пара широты и долготы. Я хотел бы использовать это для создания объекта MKPlacemark.
Обсуждение
Похоже, что этот класс может быть создан только
- (id)initWithCoordinate:(CLLocationCoordinate2D)coordinate addressDictionary:(NSDictionary *)addressDictionary
, в документации которого указано
Вы можете вручную создавать объекты меток для объектов, для которых у вас уже есть адресная информация, например, контакты в адресной книге . Создание объекта метки явно исключает необходимость запрашивать ту же информацию у объекта обратного геокодера.
Отлично! Я уже выполнил обратное геокодирование и хочу избежать такого запроса. Что я могу добавить в словарь?
Список строк, которые можно использовать для ключей этого словаря, см. В константах «Свойство адреса» в справочнике ABPerson. Все ключи должны находиться на верхнем уровне словаря.
В котором показаны соответствующие ключи.
const ABPropertyID kABPersonAddressProperty;
const CFStringRef kABPersonAddressStreetKey;
const CFStringRef kABPersonAddressCityKey;
const CFStringRef kABPersonAddressStateKey;
const CFStringRef kABPersonAddressZIPKey;
const CFStringRef kABPersonAddressCountryKey;
const CFStringRef kABPersonAddressCountryCodeKey;
Это совсем не соответствует базовым характеристикам MKPlacemark:
Доступ к данным местоположения
Доступ к атрибутам метки
Доступ к географической информации
Доступ к информации об ориентире
К счастью, в фактическом файле заголовка суперкласса MKPlacemark кое-что говорится о словаре адресов:
// address dictionary properties
@property (nonatomic, readonly) NSString *name; // eg. Apple Inc.
@property (nonatomic, readonly) NSString *thoroughfare; // street address, eg. 1 Infinite Loop
@property (nonatomic, readonly) NSString *subThoroughfare; // eg. 1
@property (nonatomic, readonly) NSString *locality; // city, eg. Cupertino
@property (nonatomic, readonly) NSString *subLocality; // neighborhood, common name, eg. Mission District
@property (nonatomic, readonly) NSString *administrativeArea; // state, eg. CA
@property (nonatomic, readonly) NSString *subAdministrativeArea; // county, eg. Santa Clara
@property (nonatomic, readonly) NSString *postalCode; // zip code, eg. 95014
@property (nonatomic, readonly) NSString *ISOcountryCode; // eg. US
@property (nonatomic, readonly) NSString *country; // eg. United States
@property (nonatomic, readonly) NSString *inlandWater; // eg. Lake Tahoe
@property (nonatomic, readonly) NSString *ocean; // eg. Pacific Ocean
@property (nonatomic, readonly) NSArray *areasOfInterest; // eg. Golden Gate Park
Итак, я создаю словарь и передаю его так:
return [[[MKPlacemark alloc] initWithCoordinate:aLocation.coordinate addressDictionary:addressDictionary] autorelease];
К сожалению, после всего этого интроспекция показывает, что информация не прижилась:
NSLog(@"placemark %@ from %@", placemark, addressDictionary);
NSLog(@"has %@", placemark.thoroughfare);
Печать
2012-01-31 20:14:22.545 [15450:1403] placemark <+___,-___> +/- 0.00m from {
administrativeArea = __;
postalCode = _____;
subAdministrativeArea = ___;
subThoroughfare = __;
thoroughfare = "_____";
}
2012-01-31 20:14:22.545[15450:1403] has (null)
Итак, я нахожусь в конец здесь. Кто-нибудь придумал, как создать свой MKPlacemark? Спасибо.