我一直在互联网上尝试找出如何从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