GMSGeocoderクラスの使い所

がわからない。

- (void) reverseGeocodeCoordinate:(CLLocationCoordinate2D) coordinate
    completionHandler:(GMSReverseGeocodeCallback)   handler 

のメソッドを使って、その緯度・経度に対応する住所を検索してくれるのだが、

[[GMSGeocoder geocoder]reverseGeocodeCoordinate:coordOPin
    completionHandler:^(GMSReverseGeocodeResponse * response, NSError *error){
        for(GMSReverseGeocodeResult *result in response.results){
            NSLog(@"addressLine1:%@", result.addressLine1);
            NSLog(@"addressLine2:%@", result.addressLine2);
        } 
    }];

結果のオブジェクトにはaddressLine1とaddressLine2の2つのプロパティしか無い。

  • どこまでが都道府県で、どこまでが市区町村なのかがわからない。
  • 当然(?)郵便番号などの情報はなし。

上記のコードで実際に出力されるログを見ると、

addressLine1:
addressLine2:東京都台東区秋葉原1−8
addressLine1:
addressLine2:東京都台東区秋葉原1
addressLine1:
addressLine2:東京都台東区秋葉原
addressLine1:東京都台東区
addressLine2:
addressLine1:東京都
addressLine2:
addressLine1:日本
addressLine2:(null)

と出力される。addressLine1と2をどう使い分けろというのか?リファレンス見てもわからなかった。

使い方がわかってないだけかもしれないが、結局、CLGeocoderを使った。

CLGeocoder *geocoder = [[CLGeocoder alloc] init];
            CLLocation *location = [[CLLocation alloc]initWithLatitude:lat longitude:lng];
            [geocoder reverseGeocodeLocation:location completionHandler:
             ^(NSArray *placemarks, NSError *error){
                 for (CLPlacemark *placemark in placemarks) {
                     NSLog(@"administrativeArea:%@", placemark.administrativeArea);
                     NSLog(@"locality:%@", placemark.locality);
                     NSLog(@"subLocality:%@", placemark.subLocality);
                     NSLog(@"thoroughfare:%@", placemark.thoroughfare);
                     NSLog(@"subThoroughfare:%@", placemark.subThoroughfare);
                 }
             }];

localityで市と区が逆に入っているが、そこさえクリアすれば、何とかなりそうな雰囲気。

administrativeArea:神奈川県
locality:鶴見区, 横浜市
subLocality:栄町通
thoroughfare:栄町通 2丁目
subThoroughfare:17番20号