使用CLGeocoder解析经纬度获取真实地理位置信息

By | 2015年6月17日

首先,我们可以通过CLLocationManager类获取用户的经纬度信息,查看之前的一篇:使用CLLOCATIONMANAGER定位获取经纬度

现在我们需要根据经纬度来获取真实的地理位置了,我们需要使用CLGeocoder类。

它接收经纬度信息,然后使用异步方式在后台连接苹果的地理编码信息数据库,拿到地理位置信息后,在返回到我们的主线程中供我们使用。

需要注意的是,这个过程是需要网络连接的。

看下代码如何实现:

func locationManager(manager: CLLocationManager!, didUpdateLocations locations: [AnyObject]!) {
    if locations.count > 0{

        //  使用last 获取 最后一个最新的位置, 前面是上一次的位置信息
        var locationInfo:CLLocation = locations.last as! CLLocation

        //位置信息反编码
        var ge:CLGeocoder = CLGeocoder()
        ge.reverseGeocodeLocation(locationInfo, completionHandler: { (res:[AnyObject]!, err:NSError!) -> Void in
            if res.count > 0 {
                var str:String = ""
                for i in 0..<res.count{
                    str += (res[i].name)
                }
                //直接获取最后一个元素
                //var pl:CLPlacemark = res.last as! CLPlacemark
                //str = pl.name
                SCMessageBox.showquick(self, contentMsg: "\(str)")
            }
        })
        //SCMessageBox.showquick(self, contentMsg: "经度:\(locationInfo.coordinate.longitude),纬度:\(locationInfo.coordinate.latitude)")
    }
}

我的运行结果如下图:

是不是惊讶,我为什么没有马赛克。。。因为这位置根本就不精确,不是本人真实所在的位置,哈哈!

因为GPS位置信息是需要纠偏的,不然会存在一点误差,具体的可以百度下,可以参考:

GPS火星坐标转换

http://code4app.com/requirement/52cfdc08cb7e84291b8b6863