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

最佳答案

您需要稍微修改一下术语-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没有“city”属性。可在此处找到属性的完整列表:CLPlacemark Class Reference

10-08 08:06