我在互联网上到处寻找如何从CLGeocoder
获取城市和国家信息。虽然可以轻松获取经度和纬度,但我需要城市和国家信息,而一直遇到过时的方法等问题,有什么想法吗?基本上需要获取位置,然后有一个NSString
表示国家,一个NSString
表示城市,这样我就可以使用它们来查找更多信息或将它们放在标签上等。
我在互联网上到处寻找如何从CLGeocoder
获取城市和国家信息。虽然可以轻松获取经度和纬度,但我需要城市和国家信息,而一直遇到过时的方法等问题,有什么想法吗?基本上需要获取位置,然后有一个NSString
表示国家,一个NSString
表示城市,这样我就可以使用它们来查找更多信息或将它们放在标签上等。
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类参考
你可以使用以下代码(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
}
}
}
CLPlacemark *myPlacemark
对象的addressDictionary
属性中的“City”键来获取城市名称:即myPlacemark.addressDictionary[@"City"]
,但是在阅读文档后应该很明显 :) - manderson