首先,我们可以通过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位置信息是需要纠偏的,不然会存在一点误差,具体的可以百度下,可以参考: