我使用这个函数:
func getDataCity(tmpLat:Double,tmpLong:Double) {
let tmpCLGeocoder = CLGeocoder.init()
let tmpDataLoc = CLLocation.init(latitude: tmpLat, longitude: tmpLong)
tmpCLGeocoder.reverseGeocodeLocation(tmpDataLoc, completionHandler: {(placemarks,error) in
guard let tmpPlacemarks = placemarks else{
return
}
let placeMark = tmpPlacemarks[0] as CLPlacemark
// Country
guard let countryLocality = placeMark.country else{
return
}
// City
guard let cityLocality = placeMark.locality else{
return
}
print(countryLocality)
print(cityLocality)
})
}
当我使用坐标时,例如,来自柏林/德国
getDataCity(tmpLat: 52.52000659999999, tmpLong: 13.404953999999975)
该功能运行良好,它显示了城市和国家/地区。但是我使用小城市或岛屿的坐标,例如杰尔巴岛(突尼斯的岛屿)
getDataCity(tmpLat: 33.8075978, tmpLong: 10.845146699999987)
该函数不打印任何内容。苹果有解释吗?我该怎么办?
要在您自己的项目中使用该功能,请将 CLLocationManagerDelegate
添加到 ViewController 并且不要忘记在您的 中添加 Privacy - Location When In Use Usage Description
>信息.plist
最佳答案
Apple 的 map 不包含该位置的城市。您的代码确实可以识别国家/地区,但无法识别那里的城市(在这种情况下您会中止)。
如果您打开 Apple Maps,您会注意到该岛上没有标记任何城市,并且搜索 Houmt Arbah, Tunisia(最近的城镇)不会在 Apple Maps 中返回结果(奇怪的是它返回 Dahmani,它是大陆城镇;我不知道为什么)。它确实知道 Houmt Souq,但距离给定位置有很长的路要走。
总而言之,Apple 的 map 数据库对突尼斯的地理知之甚少。如果你花一点时间在谷歌地图和苹果 map 上四处看看,你会发现苹果 map 对突尼斯的几个地方知之甚少。例如,如果您在卫星模式下查看 Douz,然后切换到 map 模式,您会看到 Apple 的卫星图像包括未绘制 map 的整个村庄 (Al-Qalah)。坦率地说,Douz 本身(一个拥有 38,000 人的小镇)的街道 map 是可悲的。
虽然 Apple 的 map 多年来有了显着改进,并且在某些方面现在比 Google 的 map 更好,但在大多数地方 Google 往往拥有更好的信息。如果您需要在任意地点使用最好的 map ,Google map 是当今的黄金标准。
关于ios - 获取带有经纬度的城市和国家名称(iOS),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53837883/