今回は MKPlacemark を触ってみた。
MKPlacemark
MKPlacemarkのオブジェクト は MKReverseGeocoder から生成され、国や住所情報が格納されている。
MKPlacemark Class Reference より
実際に MKReverseGeocoder を使い任意の緯度経度から MKPlacemarkを取得した時の例
addressDictionary['CountryCode']: JP addressDictionary['Street']: 14丁目 236−1 addressDictionary['SubThoroughfare']: 236−1 addressDictionary['SubLocality']: 日本橋 addressDictionary['City']: 中央区 addressDictionary['State']: 東京都 addressDictionary['Thoroughfare']: 14丁目 addressDictionary['Country']: 日本 addressDictionary['FormattedAddressLines'][0]: 日本 addressDictionary['FormattedAddressLines'][1]: 東京都中央区日本橋14丁目236−1 ---- thoroughfare : 14丁目 subThoroughfare : 236−1 locality : 中央区 subLocality : 日本橋 administrativeArea : 東京都 subAdministrativeArea : (null) postalCode : (null) country : 日本 countryCode : JP
addressDictionary の各キーは Address Book framework - ABPerson クラスの "Address Property" で定義されている。
ABPerson Reference より
<MKAnnotaction>
MKPlacemark は MKAnnotationプロトコルを実装している。ということはそのまま MKMapView へ追加することができる。前回のコードで自前の MKAnnotation実装オブジェクトを使うのをやめて単純に取得した MKPlacemarkオブジェクトを MKMapViewへ addAnnotation したところ地図上にピンが表示され、タップで住所が表示されるようになった。
- (void)reverseGeocoder:(MKReverseGeocoder*)geocoder didFindPlacemark:(MKPlacemark*)placemark { [self.mapView addAnnotation:placemark]; /* self.label.text = placemark.title; [self logPlacemark:placemark]; SimpleAnnotation* annotation = [self annotationForCoordinate:geocoder.coordinate]; annotation.title = placemark.title; */ }簡易な用途ならこれで十分。
ソースコード
GitHubからどうぞ。
Responses
Leave a Response