Проблема
У меня есть набор меток (страна, город и т.д.) и пара Lat/Lon. Я хотел бы использовать это для создания объекта MKPlacemark.
Обсуждение
Похоже, что этот класс может быть создан только
- (id)initWithCoordinate:(CLLocationCoordinate2D)coordinate addressDictionary:(NSDictionary *)addressDictionary
чьи состояния состояний документов
Вы можете создавать объекты меток вручную для объектов, для которых у вас уже есть адресная информация, такая как контакты в адресной книге. Создание объекта метки помещается в явном виде, избегая необходимости запрашивать объект обратного геокодера для получения той же информации.
Perfect! Я уже обратил геокодирование и хочу избежать такого запроса. Что я могу добавить в словарь?
Список строк, которые вы можете использовать для ключей этого словаря, см. в константах "Свойство адреса" в ABPerson Reference. Все ключи должны находиться на верхнем уровне словаря.
Что показывает соответствующие клавиши
const ABPropertyID kABPersonAddressProperty;
const CFStringRef kABPersonAddressStreetKey;
const CFStringRef kABPersonAddressCityKey;
const CFStringRef kABPersonAddressStateKey;
const CFStringRef kABPersonAddressZIPKey;
const CFStringRef kABPersonAddressCountryKey;
const CFStringRef kABPersonAddressCountryCodeKey;
Это не соответствует базовым признакам для MKPlacemark:
Доступ к данным местоположения
- свойство местоположения
Доступ к атрибутам метки метки
- имя свойства
- addressDictionary свойство
- Свойство ISOcountryCode
- Загородная недвижимость
- свойство postalCode
- свойство AdministrativeArea
- Свойство subAdministrativeArea
- Локальное свойство
- Свойство subLocality
- свойство проезда
- свойство subThoroughfare
- свойство области
Доступ к географической информации
- Внутреннее свойство Water
- Свойства океана
Доступ к информации Landmark
- areasOfInterest свойство
К счастью, фактический заголовочный файл для суперкласса 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? Спасибо.