问题
我有一组地标信息(国家,城市等)和一个纬度/经度对。 我想使用它来创建一个MKPlacemark对象。
讨论
看起来只能通过以下方式创建该类:
- (id)initWithCoordinate:(CLLocationCoordinate2D)coordinate addressDictionary:(NSDictionary *)addressDictionary
文档指出
如果您已经拥有地址信息(例如通讯录中的联系人),可以手动为实体创建标记对象。显式创建一个标记对象可避免需要查询反向地理编码器对象获取相同的信息。
太好了! 我已经进行了反向地理编码并希望避免这样的查询。 我可以添加什么到字典中?
有关可用于此字典键的字符串列表,请参见ABPerson Reference中的“地址属性”常量。 字典中的所有键都应该在顶层。
其中显示相关键
const ABPropertyID kABPersonAddressProperty;
const CFStringRef kABPersonAddressStreetKey;
const CFStringRef kABPersonAddressCityKey;
const CFStringRef kABPersonAddressStateKey;
const CFStringRef kABPersonAddressZIPKey;
const CFStringRef kABPersonAddressCountryKey;
const CFStringRef kABPersonAddressCountryCodeKey;
这远远不足以满足MKPlacemark的基本特性:
访问位置数据
- location 属性
访问地标属性
- name 属性
- addressDictionary 属性
- ISOcountryCode 属性
- country 属性
- postalCode 属性
- administrativeArea 属性
- subAdministrativeArea 属性
- locality 属性
- subLocality 属性
- thoroughfare 属性
- subThoroughfare 属性
- region 属性
访问地理信息
- inlandWater 属性
- ocean 属性
访问地标信息
- 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吗?谢谢。