10

我一直在互联网上试图找出如何从CLGeocoder. 我可以轻松获得经度和纬度,但我需要城市和国家/地区信息,而且我不断遇到不推荐使用的方法等,有什么想法吗?它基本上需要获取位置,然后有一个NSString国家和NSString城市,所以我可以用它们来查找更多信息或将它们放在标签上等。

4

2 回答 2

18

您需要稍微修改一下您的术语——CLGeocoder(和大多数地理编码器)本身不会给你一个“城市”——它使用诸如“行政区”、“子行政区”等术语。CLGeocoder 对象将返回一组 CLPlacemark 对象,然后您可以查询所需的信息。您初始化 CLGeocoder 并使用位置和完成块调用 reverseGeocodeLocation 函数。这是一个例子:

    if (osVersion() >= 5.0){

    CLGeocoder *reverseGeocoder = [[CLGeocoder alloc] init];

    [reverseGeocoder reverseGeocodeLocation:self.currentLocation completionHandler:^(NSArray *placemarks, NSError *error)
     {
         DDLogVerbose(@"reverseGeocodeLocation:completionHandler: Completion Handler called!");
         if (error){
             DDLogError(@"Geocode failed with error: %@", error);
             return;
         }

         DDLogVerbose(@"Received placemarks: %@", placemarks);


         CLPlacemark *myPlacemark = [placemarks objectAtIndex:0];
         NSString *countryCode = myPlacemark.ISOcountryCode;
         NSString *countryName = myPlacemark.country;
         DDLogVerbose(@"My country code: %@ and countryName: %@", countryCode, countryName);

     }];
    }

现在请注意,CLPlacemark 没有“城市”属性。可以在此处找到完整的属性列表:CLPlacemark 类参考

于 2013-01-29T06:07:49.183 回答
0

你可以使用这个(Swift 5)获取城市、国家和 iso 国家代码:

private func getAddress(from coordinates: CLLocation) {
    CLGeocoder().reverseGeocodeLocation(coordinates) { placemark, error in
        guard error == nil,
            let placemark = placemark
        else
        {
            // TODO: Handle error
            return
        }

        if placemark.count > 0 {
            let place = placemark[0]
            let city = place.locality
            let country = place.country
            let countryIsoCode = place.isoCountryCode
        }
    }
}
于 2019-10-01T18:06:42.367 回答