我使用此功能:
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,不要忘记在您的 Info.plist
Privacy - Location When In Use Usage Description
答案 0 :(得分:1)
Apple的地图不包含该位置的城市。您的代码可以识别国家/地区,但不能识别城市(在这种情况下,您将中止)。
如果打开Apple Maps,您会注意到该岛上没有标记任何城市,并且搜索突尼斯(最近的城镇)胡姆特阿尔巴不会在Apple Maps中返回结果(奇怪的是返回Dahmani,是一个大陆小镇;我不知道为什么)。它确实了解Houmt Souq,但是从给定的位置开始还有很多距离。
短期和长期是,苹果的地图数据库对突尼斯的地理知识了解不多。如果您花一点时间在Google Maps vs Apple Maps中四处逛逛,您会发现突尼斯的一些地方对Apple Maps知之甚少。例如,如果您在卫星模式下查看Douz,然后切换到地图模式,则会看到Apple的卫星图像包括未映射的整个村庄(Al-Qalah)。坦率地说,杜兹本身(一个有3万8千人口的小镇)的街道地图是可悲的。
尽管这些年来苹果的地图已经有了显着改善,但在某些方面它们现在已经比谷歌的地图更好,但在大多数地方,谷歌的信息往往要好得多。如果您在任意地方都需要最好的地图,今天的Google地图就是黄金标准。