しょぼしょぼプログラマ雑記

自分のための備忘録。 開発記録など掲載してます。 質問・ご意見・ご感想等はTwitter ( https://twitter.com/yun_hokuto ) までお気軽にどうぞ。

iOS8での逆ジオコーディング

地図のピンを置いた座標(緯度、経度)から住所を出したい時がありますよね

そういう場合のサンプルソースコードを作ってみました。

1.プロジェクトにMapKit.frameworkとCoreLocation.frameworkを追加
もしかしたらどちらか片方でいいかも?(適当)

2.下記ソースコードを追加

       // リバースジオコーディング
        CLGeocoder *geocoder = [[CLGeocoder alloc] init];
        CLLocation *location = [[CLLocation alloc] initWithLatitude:35.170756 longitude:136.882653];
        [geocoder reverseGeocodeLocation:location completionHandler:^(NSArray *placemarks, NSError *error) {
            if(error) {
                NSLog(@"リバースジオコーディング失敗");
            } else {
                if(0 < [placemarks count]) {
                    for(CLPlacemark *placemark in placemarks) {
                        NSLog(@"addressDictionary: [%@]", [placemark.addressDictionary description]);
                        NSLog(@"name: [%@]", placemark.name);
                        NSLog(@"thoroughfare: [%@]", placemark.thoroughfare);
                        NSLog(@"subThoroughfare: [%@]", placemark.subThoroughfare);
                        NSLog(@"locality: [%@]", placemark.locality);
                        NSLog(@"subLocality: [%@]", placemark.subLocality);
                        NSLog(@"administrativeArea: [%@]", placemark.administrativeArea);
                        NSLog(@"subAdministrativeArea: [%@]", placemark.subAdministrativeArea);
                        NSLog(@"postalCode: [%@]", placemark.postalCode);
                        NSLog(@"ISOcountryCode: [%@]", placemark.ISOcountryCode);
                        NSLog(@"country: [%@]", placemark.country);
                        NSLog(@"inlandWater: [%@]", placemark.inlandWater);
                        NSLog(@"ocean: [%@]", placemark.ocean);
                        NSLog(@"areasOfInterest: [%@]", placemark.areasOfInterest);
                        NSLog(@"----------");
                        NSLog(@"address:%@%@%@%@%@", placemark.country, placemark.administrativeArea, placemark.locality, placemark.thoroughfare, placemark.subThoroughfare);
                    }
                }
            }
        }];

これだけです。

一番最後のログには日本形式の住所が出てきます。

こちらのサンプルを動かすと、最後のログにはどこが出るでしょうか?

正解は「名古屋駅の住所(日本愛知県名古屋市中村区名駅1丁目1番4号)」です。
※答えは反転してあります。

また、逆ジオコーディングではデバイスの言語やロケーションによって取得できるものが異なるそうなので、その辺を注意しながら作る必要がありそうです。