小编典典

Swift中的反向地理编码位置

swift

关闭。 这个问题不能重现,或者是由错别字引起的。它当前不接受答案。


想改善这个问题吗? 更新问题,使其成为Stack Overflow 的主题

5年前关闭。

改善这个问题

我输入的是纬度和经度。我需要使用reverseGeocodeLocationswift 的功能,以便向我提供位置信息的输出。我尝试使用的代码是

            println(geopoint.longitude) 
            println(geopoint.latitude)
            var manager : CLLocationManager!
            var longitude :CLLocationDegrees = geopoint.longitude
            var latitude :CLLocationDegrees = geopoint.latitude

            var location: CLLocationCoordinate2D = CLLocationCoordinate2DMake(latitude, longitude)
            println(location)

            CLGeocoder().reverseGeocodeLocation(manager.location, completionHandler: {(placemarks, error) -> Void in
                println(manager.location)

                if error != nil {
                    println("Reverse geocoder failed with error" + error.localizedDescription)
                    return
                }
                if placemarks.count > 0 {
                    let pm = placemarks[0] as CLPlacemark


                    println(pm.locality)
                }


                else {
                    println("Problem with the data received from geocoder")
                }

在我得到的日志中

//-122.0312186
//37.33233141
//C.CLLocationCoordinate2D
//fatal error: unexpectedly found nil while unwrapping an Optional value

似乎该CLLocationCoordinate2DMake函数正在失败,然后导致该reverseGeocodeLocation函数中的致命错误。我是否在某处修改了格式?


阅读 391

收藏
2020-07-07

共1个答案

小编典典

您永远不会对地理位置进行地理编码,而是传递manager.location。

看到: CLGeocoder().reverseGeocodeLocation(manager.location, ...

我认为这是一个复制粘贴错误,这就是问题所在-代码本身看起来不错-差不多;)

工作代码

    var longitude :CLLocationDegrees = -122.0312186
    var latitude :CLLocationDegrees = 37.33233141

    var location = CLLocation(latitude: latitude, longitude: longitude) //changed!!!
    println(location)

    CLGeocoder().reverseGeocodeLocation(location, completionHandler: {(placemarks, error) -> Void in
        println(location)
        guard error == nil else {
            println("Reverse geocoder failed with error" + error.localizedDescription)
            return
        }
        guard placemarks.count > 0 else {
            println("Problem with the data received from geocoder")
            return
        }
        let pm = placemarks[0] as! CLPlacemark
        println(pm.locality)
    })
2020-07-07