美文网首页ios程序员
iOS地理编码的简单实现

iOS地理编码的简单实现

作者: _好奇宝宝_ | 来源:发表于2018-04-08 20:07 被阅读312次

今天来写写地理编码 ,废话不多说,直接进入正题

地理编码有两种方式
  • 反地理编码:把经纬度转换成地名
  • 正地理编码:把地名转变成经纬度

不管是正地理编码还是反地理编码,都是由CLGeocoder对象调用相应的实例方法实现

反地理编码代码:

/// 反地理编码
    func reverseCeocode() {
        let geocoder = CLGeocoder()
        
        //CLLocation对象: 纬度40,经度116
        let location = CLLocation(latitude: 40, longitude: 116)
        
        // CLGeocoder对象的反地理编码方法
        // 参数一:一个CLLocation对象
        // 参数二:完成回调,回调传来两个参数,一个是CLPlacemark地标对象组成的数组, 一个是编码失败的Error
        geocoder.reverseGeocodeLocation(location) { (placemarks: [CLPlacemark]?, error: Error?) in
            
            if error != nil {
                print("编码失败")
                return
            }
            
            /// 获取数组最后一个
            let placemark = placemarks!.last!
            
            print("经纬度:", placemark.location!.coordinate)
            print("城市:" + placemark.locality!)
            print("具体位置:" + placemark.name!)
            
        }
    }

输出结果:

经纬度: CLLocationCoordinate2D(latitude: 40.0, longitude: 116.0)
城市:北京市
具体位置:妙峰山镇

如果对CLLocation对象不熟悉,可以参考这篇文章浅谈iOS定位

正地理编码代码:

    /// 正地理编码
    func geocode() {
        
        let geocoder = CLGeocoder()
        
        // CLGeocoder对象的正地理方法
        // 参数一:地名
        // 参数二:完成回调,回调传来两个参数,一个是CLPlacemark地标对象组成的数组, 一个是编码失败的Error
        geocoder.geocodeAddressString("白云") { (placemarks: [CLPlacemark]?, error: Error?) in
            if error != nil {
                print("编码失败")
            }
            
            // 正向编码要遍历地标数组, 因为中国可能有多个有'白云'两个字的地方
            // 反向编码一般不要,一个经纬度一般只对应一个地方
            for placemark in placemarks ?? [] {
                print("经纬度:", placemark.location!.coordinate)
                print("城市:" + placemark.locality!)
                print("具体位置:" + placemark.name!)
            }
        }
    }

输出结果:

经纬度: CLLocationCoordinate2D(latitude: 26.676849000000001, longitude: 106.633037)
城市:贵阳市
具体位置:白云区
经纬度: CLLocationCoordinate2D(latitude: 23.162281, longitude: 113.26283100000001)
城市:广州市
具体位置:白云区

输出结果表明,贵阳市有个白云区
广州市也有一个白云区。地名重名。

下面看一下CLPlacemark地标类的属性

CLPlacemark类的属性

open var location: CLLocation? { get }
open var country: String? { get } // 国家
open var administrativeArea: String? { get } // 省
open var locality: String? { get } // 城市
open var subLocality: String? { get } // 区
open var name: String? { get } // 具体位置
open var thoroughfare: String? { get } // 街道信息
open var subThoroughfare: String? { get } // 子街道信息

地理编码的简单实现就到这里。

相关文章

  • Corelocation

    本文章针对iOS8之前、iOS8、以及iOS9.0定位功能的实现,并对指南针、地理反地理编码做个简单介绍 iOS8...

  • iOS地理编码的简单实现

    今天来写写地理编码 ,废话不多说,直接进入正题 地理编码有两种方式 反地理编码:把经纬度转换成地名 正地理编码:把...

  • 地理编码

    地理编码和反地理编码都使用CLGeocoder类来实现. 地理编码使用 geocodeAddressString:...

  • iOS 地理编码 / 反地理编码

    一、CLGeocoder 地理编码 与 反地理编码 地理编码:根据给定的地名,获得具体的位置信息(比如经纬度、地址...

  • 基于CLGeocoder - 反地理编码

    iOS中CoreLocatio框架中的CLGeocoder 类不但为我们提供了地理编码方法,而且还提供了反地理编码...

  • 基于百度API的 - 反地理编码

    iOS中CoreLocatio框架中的CLGeocoder 类不但为我们提供了地理编码方法,而且还提供了反地理编码...

  • 百度地图之地理编码和反地理编码

    地理编码:将地理信息转换成坐标信息的过程 反地理编码:将地理坐标转换成具体的地址信息 实现过程:

  • iOS - 定位、地理编码、反地理编码

    #pragma mark---*定位: 一、介绍 1、定位使用CoreLocation框架 2、功能:(1)基础定...

  • iOS 地理编码反编码

    本文目录 地理编码地名 -> 经纬度 等具体位置数据信息。根据给定的位置(通常是地名)确定地理坐标(经、纬度)。 ...

  • CLGeocoder

    CLGeocoder(地理编码) 使用CLGeocoder可以完成“地理编码”和“反地理编码”地理编码:根据给定的...

网友评论

    本文标题:iOS地理编码的简单实现

    本文链接:https://www.haomeiwen.com/subject/gijmhftx.html