使用纬度和经度(iOS)获取城市和国家/地区名称

时间:2018-12-18 17:03:56

标签: ios swift coordinates latitude-longitude

我使用此功能:

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

1 个答案:

答案 0 :(得分:1)

Apple的地图不包含该位置的城市。您的代码可以识别国家/地区,但不能识别城市(在这种情况下,您将中止)。

如果打开Apple Maps,您会注意到该岛上没有标记任何城市,并且搜索突尼斯(最近的城镇)胡姆特阿尔巴不会在Apple Maps中返回结果(奇怪的是返回Dahmani,是一个大陆小镇;我不知道为什么)。它确实了解Houmt Souq,但是从给定的位置开始还有很多距离。

短期和长期是,苹果的地图数据库对突尼斯的地理知识了解不多。如果您花一点时间在Google Maps vs Apple Maps中四处逛逛,您会发现突尼斯的一些地方对Apple Maps知之甚少。例如,如果您在卫星模式下查看Douz,然后切换到地图模式,则会看到Apple的卫星图像包括未映射的整个村庄(Al-Qalah)。坦率地说,杜兹本身(一个有3万8千人口的小镇)的街道地图是可悲的。

尽管这些年来苹果的地图已经有了显着改善,但在某些方面它们现在已经比谷歌的地图更好,但在大多数地方,谷歌的信息往往要好得多。如果您在任意地方都需要最好的地图,今天的Google地图就是黄金标准。