ios - 获取带有经纬度的城市和国家名称(iOS)
问题描述
我使用这个功能:
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)
该功能运行良好,它向我展示了城市和国家。但是我使用来自小城市或岛屿的坐标,例如 Djerba(突尼斯的岛屿)
getDataCity(tmpLat: 33.8075978, tmpLong: 10.845146699999987)
该功能不打印任何内容。苹果有解释吗?我能做些什么呢?
要在您自己的项目中使用该功能,请添加CLLocationManagerDelegate
到 ViewController 并且不要忘记Privacy - Location When In Use Usage Description
在您的Info.plist 中添加
解决方案
Apple 的地图不包括该位置的城市。您的代码确实可以识别该国家/地区,但无法识别那里的城市(在这种情况下您会中止)。
如果您打开 Apple Maps,您会注意到该岛上没有标记任何城市,并且搜索 Houmt Arbah, Tunisia(最近的城镇)不会在 Apple Maps 中返回结果(它奇怪地返回 Dahmani,这是一个大陆镇;我不知道为什么)。它确实知道 Houmt Souq,但距离给定位置还有很长的路要走。
总而言之,苹果的地图数据库对突尼斯的地理了解不多。如果您花一点时间在 Google Maps 与 Apple Maps 中四处看看,您会发现突尼斯的几个部分,Apple Maps 知之甚少。例如,如果您在卫星模式下查看 Douz,然后切换到地图模式,您会看到 Apple 的卫星图像包括未绘制地图的整个村庄 (Al-Qalah)。而 Douz 本身的街道地图(一个 38,000 人的小镇),坦率地说,是可悲的。
尽管苹果的地图多年来有了显着改进,并且在某些领域现在比谷歌的地图更好,但在大多数地方,谷歌往往拥有更好的信息。如果您需要任意地点的最佳地图,Google 的地图就是当今的黄金标准。
推荐阅读
- android - Kotlin - Uncaught TypeError: X is not a function - JavascriptInterface with WebViews
- javascript - 在Javascript中的多个键上加入对象数组
- python - 使用 Python/OpenCV 从图像中提取固定数量的正方形
- python - 如何为具有动态大小的二维数组的元素赋值?
- jenkins - IntelliJ、Groovy、Jenkins 和未解决的访问
- apache-spark - Pyspark 中两个数组相减得到一个新数组
- python - 为什么在 python 中使用 OrderedDict 有缺点?
- html - 更改弹出菜单按钮的颜色
- amazon-web-services - 将用户数据文件传递给 lamda 以创建 ec2
- java - 比较java中数组的元素