在用户点击上获取国家/地区唯一标识符

时间:2018-02-07 09:08:33

标签: ios swift mapkit geocoding

当用户点击MapKit地图上的特定地点时,我需要知道某个国家/地区是否属于特定国家/地区(例如西班牙),然后我必须根据检索到的信息。

我最初想过使用我得到的国家/地区名称from

reverseGeocodeLocation(_ location: CLLocation, 
          completionHandler: @escaping CLGeocodeCompletionHandler)

但国家/地区名称与设备区域设置严格相关,因此使用国家/地区名称并不是一个好主意...

然后,我认为让isoCountryCode成为更好的选择,但是,我不知道为什么在我的测试CLPlacemark中没有返回它。

最后,还有CLGeocoder().reverseGeocodeLocation函数的另一个版本,可让您指定preferredLocalethis是可行的吗?

func reverseGeocodeLocation(_ location: CLLocation, 
            preferredLocale locale: Locale?, 
          completionHandler: @escaping CLGeocodeCompletionHandler)

1 个答案:

答案 0 :(得分:1)

从lat&获取地址信息长,

<强>夫特

     let loc: CLLocation = CLLocation(latitude:center.latitude, longitude: center.longitude)

    geoCoder.reverseGeocodeLocation(loc, completionHandler:
        {(placemarks, error) in
            if (error != nil)
            {
                print("reverse geodcode fail: \(error!.localizedDescription)")
            }
            let pm = placemarks! as [CLPlacemark]

            if pm.count > 0 {
                let pm = placemarks![0]
                print(pm.country)
                print(pm.ISOcountryCode)
          }
    })

}

<强>的OBJ-C

  CLGeocoder *geocoder = [[CLGeocoder alloc] init] ;
        __block CLPlacemark *placemark = nil;

        [geocoder reverseGeocodeLocation:currentLocation
                       completionHandler:^(NSArray *placemarks, NSError *error)
         {
             if (error){

                 NSLog(@"************************************* Geocode failed with error:************************************* \n %@", error);
             }else{
             placemark = [placemarks objectAtIndex:0];
             NSLog(@"Current placemark %@", placemark);
             NSLog(@"Current country code: %@", [placemark ISOcountryCode]);
          }
         }];