首页 > 解决方案 > 获取带有经纬度的城市和国家名称(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 中添加

标签: iosswiftcoordinateslatitude-longitude

解决方案


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 的地图就是当今的黄金标准。


推荐阅读