Convert coordinates to City name?

后端 未结 9 1162
Happy的楠姐
Happy的楠姐 2020-12-02 07:41

How to get an address from coordinates using MapKit?

I have this code when long press on the map it gets the coordinates:

func didLongPressMap(sender         


        
9条回答
  •  遥遥无期
    2020-12-02 08:13

    For Swift 3: and Swift 4

    First you need to set allowance to receive User's GPS in the info.plist.

    Set: NSLocationWhenInUseUsageDescription with a random String. And/or: NSLocationAlwaysUsageDescription with a random String.

    Then I have set up a class to get the desired data like zip, town, country...:

    import Foundation
    import MapKit
    
    typealias JSONDictionary = [String:Any]
    
    class LocationServices {
    
        let shared = LocationServices()
        let locManager = CLLocationManager()
        var currentLocation: CLLocation!
    
        let authStatus = CLLocationManager.authorizationStatus()
        let inUse = CLAuthorizationStatus.authorizedWhenInUse
        let always = CLAuthorizationStatus.authorizedAlways
    
        func getAdress(completion: @escaping (_ address: JSONDictionary?, _ error: Error?) -> ()) {
    
            self.locManager.requestWhenInUseAuthorization()
    
            if self.authStatus == inUse || self.authStatus == always {
    
                self.currentLocation = locManager.location
    
                let geoCoder = CLGeocoder()
    
                geoCoder.reverseGeocodeLocation(self.currentLocation) { placemarks, error in
    
                    if let e = error {
    
                        completion(nil, e)
    
                    } else {
    
                        let placeArray = placemarks as? [CLPlacemark]
    
                        var placeMark: CLPlacemark!
    
                        placeMark = placeArray?[0]
    
                        guard let address = placeMark.addressDictionary as? JSONDictionary else {
                            return
                        }
    
                        completion(address, nil)
    
                    }
    
                }
    
            }
    
        }
    
    }
    

    Called by:

    import UIKit
    
    class ViewController: UIViewController {
    
        override func viewDidLoad() {
            super.viewDidLoad()
            LocationServices.shared.getAdress { address, error in
    
                if let a = address, let city = a["City"] as? String {
                   //
                }
    
            }
    
        }
    
    }
    

    Done

提交回复
热议问题