CLPlacemark と、マップに追加されたピンの吹き出しの情報をいつ/どのように作成するかを理解しようとしています。数年前に More iOS 3 development で読んだことよりも前に、彼らは住所をリバース ジオコーディングし、住所 (番地、郵便番号、州など) を作成していました。まず、この文字列を自分で作成する必要がありますか? 以下のコードでアップルストアを検索するなど、特定の既知のものの場所の名前を取得する方法を見つけようとしていました。
NSString *address = @"1 stockton, san francisco, ca";
CLGeocoder *geocoder = [[CLGeocoder alloc] init];
[geocoder geocodeAddressString:address completionHandler:^(NSArray *placemarks, NSError *error) {
[placemarks enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
NSLog(@"obj description: %@", [obj description]);
CLPlacemark *aPlacemark = (CLPlacemark *)obj;
NSLog(@"%@", [aPlacemark.addressDictionary description]);
NSLog(@"name: %@", ((CLPlacemark *)obj).name);
}];
];
説明を印刷すると、コンソールに次のように表示されます。
Apple Store, San Francisco, 1 Stockton St, San Francisco, CA 94108-5805, United States @ <+37.78584545,-122.40651752> +/- 100.00m, region (identifier <+37.78584545,-122.40652161> radius 18.96) <+37.78584545,-122.40652161> radius 18.96m
サンフランシスコの Apple Store という名前はどこから来たのですか? CLPlacemark.name プロパティだと思ったのですが、null です。したがって、 name プロパティがどのように作成されるかを理解しようとすると、次のことがわかりました。
NSLog(@"%@", [aPlacemark.addressDictionary description]);
出力が得られます:
City = "San Francisco";
Country = "United States";
CountryCode = US;
FormattedAddressLines = (
"Apple Store, San Francisco",
"1 Stockton St",
"San Francisco, CA 94108-5805",
"United States"
);
PostCodeExtension = 5805;
State = California;
Street = "1 Stockton St";
SubAdministrativeArea = "San Francisco";
SubLocality = "Union Square";
SubThoroughfare = 1;
Thoroughfare = "Stockton St";
ZIP = 94108;
ここからわかるのは、addressDictionary の FormattedAddressLines キーにタイトルもあるということだけです。
だから私は私の2つの質問は次のとおりだと思います:
1) 場所 (Apple Store など) がある場合、その場所の名前を取得するにはどうすればよいですか?
2) アドレス ディクショナリがすでにそれを行っているように見えるので、もう文字列を作成する必要がありますか?
ありがとう!