Swift - 异步编程库PromiseKit使用详解11(CLGeocoder的扩展)
作者:hangge | 2018-12-26 08:10
通过 CLGeocoder 类我们可以实现经纬度位置坐标与真实地理位置相互转化。PromiseKit 同样也对其进行了扩展,方便我们使用。
十二、CLGeocoder 的扩展
1,准备工作
首先我们同样要安装 PromiseKit 库,以及相关的 CoreLocation 扩展库,具体步骤参考我之前的文章:
2,使用样例
(1)通过经纬度获取地址信息
import UIKit import PromiseKit import PMKCoreLocation class ViewController: UIViewController { @IBOutlet weak var textView: UITextView! override func viewDidLoad() { super.viewDidLoad() //需要解析的经纬度坐标 let currentLocation = CLLocation(latitude: 32.029171, longitude: 118.788231) //根据经纬度坐标获取地址信息 CLGeocoder().reverseGeocode(location: currentLocation) .done { placemarks in //强制转成简体中文 let array = NSArray(object: "zh-hans") UserDefaults.standard.set(array, forKey: "AppleLanguages") //显示所有信息 let p = placemarks[0] print(p) //输出反编码信息 var address = "--- 通过经纬度获取到如下地址 ---\n" if let country = p.country { address.append("国家:\(country)\n") } if let administrativeArea = p.administrativeArea { address.append("省份:\(administrativeArea)\n") } if let subAdministrativeArea = p.subAdministrativeArea { address.append("其他行政区域信息(自治区等):\(subAdministrativeArea)\n") } if let locality = p.locality { address.append("城市:\(locality)\n") } if let subLocality = p.subLocality { address.append("区划:\(subLocality)\n") } if let thoroughfare = p.thoroughfare { address.append("街道:\(thoroughfare)\n") } if let subThoroughfare = p.subThoroughfare { address.append("门牌:\(subThoroughfare)\n") } if let name = p.name { address.append("地名:\(name)\n") } if let isoCountryCode = p.isoCountryCode { address.append("国家编码:\(isoCountryCode)\n") } if let postalCode = p.postalCode { address.append("邮编:\(postalCode)\n") } if let areasOfInterest = p.areasOfInterest { address.append("关联的或利益相关的地标:\(areasOfInterest)\n") } if let ocean = p.ocean { address.append("海洋:\(ocean)\n") } if let inlandWater = p.inlandWater { address.append("水源,湖泊:\(inlandWater)\n") } self.textView.text = address }.catch { error in self.textView.text = "错误:\(error.localizedDescription))" } } }
(2)通过地址获取对应的经纬度
import UIKit import PromiseKit import PMKCoreLocation class ViewController: UIViewController { @IBOutlet weak var textView: UITextView! override func viewDidLoad() { super.viewDidLoad() //根据地址获取对应的经纬度坐标 CLGeocoder().geocode("南京市新街口大洋百货") .done { placemarks in let p = placemarks[0] self.textView.text = "经度:\(p.location!.coordinate.longitude) " + "纬度:\(p.location!.coordinate.latitude)" }.catch { error in self.textView.text = "错误:\(error.localizedDescription))" } } }
全部评论(0)