iOS开发 - 地理编码与反地理编码

作者: 小黑Swift | 来源:发表于2016-07-15 21:41 被阅读481次

在获取用户位置时候,Core Location 会返回一对经纬度。我们人类看不出什么东东,但是存在就是合理,交给机器吧。

地理编码 : 地址 -> 坐标
反地理编码: 坐标 (经纬度) -> 地址

Core Location 提供了转换工具,但需要联网(;′⌒`)

Core Location 通过 CLGeocoder 类来实现正向和反向地理编码,因为是通过服务器来实现转换的,所以得联网。

在进行反地理编码时候,会返回一个数组。其中包含很多 CLPlacemark 对象。为啥是数组呢,因为反地理编码解析时候,可能会反回许多可能的值。

可以访问的属性有:
• 位置的名字
• 街道名称
• 地区
• 子地区
• 行政区域
• 子行政区域
• 邮政编码
• 国家代码
• 国家名字
-有些地方,可能还包含其他相关信息

我们可以利用上面需要的信息,生成用户需要的字符串。

    //1 import CoreLocation 2 CLLocationManagerDelegate
    //反地理编码
    func reverseGeocode(latitude:Double, longitude: Double){
        let geocoder = CLGeocoder()
        let currentLocation = CLLocation(latitude: latitude, longitude: longitude)
        geocoder.reverseGeocodeLocation(currentLocation, completionHandler: {
            (placemarks:[CLPlacemark]?, error:NSError?) -> Void in

            guard error == nil else {
                return print(error!.localizedDescription)
            }
            
            guard let p = placemarks?[0] else {
                return print("没有找到一个地址")
            }
            
            
                print(p.name) // 中国广东省广州市XX区XX街道几号
            
                /*
                name                        // eg. Apple Inc.
                thoroughfare               // street name, eg. Infinite Loop
                subThoroughfare           // eg. 1
                locality                 // city, eg. Cupertino
                subLocality             // neighborhood, common name, eg. Mission District
                administrativeArea     // state, eg. CA
                subAdministrativeArea // county, eg. Santa Clara
                postalCode           // zip code, eg. 95014
                ISOcountryCode      // eg. US
                country            // eg. United States
                inlandWater       // eg. Lake Tahoe
                ocean            // eg. Pacific Ocean
                areasOfInterest // eg. Golden Gate Park
                */
        })
    }

    //地理编码
    func locationEncode() {
        let geocoder = CLGeocoder()
        geocoder.geocodeAddressString("广州塔", completionHandler: {
            (placemarks:[CLPlacemark]?, error:NSError?) -> Void in
            
            guard error == nil else {
                return print(error!.localizedDescription)
            }
            
            guard let p = placemarks?[0] else {
                return print("没有找到一个地址")
            }
            
            let longitude = p.location?.coordinate.longitude
            let latitude = p.location?.coordinate.latitude
            print("经度:\(longitude),维度:\(latitude)")
        })
    }

相关文章

  • iOS开发 - 地理编码与反地理编码

    在获取用户位置时候,Core Location 会返回一对经纬度。我们人类看不出什么东东,但是存在就是合理,交给机...

  • iOS开发之地理编码 反地理编码

    上一章有一些地理编码 反地理编码的理论知识,有兴趣的话可以去了解一下下面是代码示例:

  • CLGeocoder

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

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

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

  • 高德地图问题

    1:定位的时候获取用户的省市区位置,通过反地理编码 地理编码与反地理编码 地理编码:根据地址获得相应的经纬度以及详...

  • 地理编码与反地理编码

    使用CLGeocoder可以完成“地理编码”和“反地理编码” 地理编码:根据给定的地名,获得具体的位置信息(比如经...

  • 地理编码

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

  • 地图和定位(三)

    一、地理编码和反地理编码 地理编码:把地址转为经纬度反地理编码:把经纬度转为地址 二、获取当前城市名称(定位+反地...

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

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

  • iOS 地理编码反编码

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

网友评论

    本文标题:iOS开发 - 地理编码与反地理编码

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