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开发 - 地理编码与反地理编码

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