Find city name and country from latitude and longitude in Swift

前端 未结 11 1957
既然无缘
既然无缘 2020-12-12 22:58

I\'m working on application in Swift3 and I have letter problem i can\'t find the answer for it.

How can I know city name and country short names base on latitud

11条回答
  •  失恋的感觉
    2020-12-12 23:17

    1 . import CoreLocation 2 . insert CLLocationManagerDelegate in your class 3 . Do the delegate methods described below... hope it will help you you can find city name and country through following these steps...Here is my code

        import UIKit
    
        import CoreLocation 
    
        class MyViewController:UIViewController,CLLocationManagerDelegate {
        override func viewDidLoad() {
            super.viewDidLoad()
    
    
            self.locationManager.delegate = self
            self.locationManager.desiredAccuracy = kCLLocationAccuracyBest
            self.locationManager.requestWhenInUseAuthorization()
            self.locationManager.requestAlwaysAuthorization()
            self.locationManager.startUpdatingLocation()
    
    
    }
    
        func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
    
    
    
            if( CLLocationManager.authorizationStatus() == .authorizedWhenInUse ||
                CLLocationManager.authorizationStatus() ==  .authorizedAlways){
    
               if let currentLocation = locationManager.location
               {
    
               if NetworkFunctions.NetworkRechability()
               {
    
                getAddressFromLatLon(pdblLatitude: "\(Double((currentLocation.coordinate.latitude)))", withLongitude: "\(Double((currentLocation.coordinate.longitude)))")
    
                }
    
                }
            }
    
    
    
        }
    
        func getAddressFromLatLon(pdblLatitude: String, withLongitude pdblLongitude: String) {
            var center : CLLocationCoordinate2D = CLLocationCoordinate2D()
            let lat: Double = Double("\(pdblLatitude)")!
    
            let lon: Double = Double("\(pdblLongitude)")!
    
            let ceo: CLGeocoder = CLGeocoder()
            center.latitude = lat
            center.longitude = lon
    
            let loc: CLLocation = CLLocation(latitude:center.latitude, longitude: center.longitude)
    
    
            ceo.reverseGeocodeLocation(loc, completionHandler:
                {(placemarks, error) in
                    if (error != nil)
                    {
                    }
    
                    if placemarks != nil
                    {
    
                        let pm = placemarks! as [CLPlacemark]
    
                        if pm.count > 0 {
    
                            let pm = placemarks![0]
    
                            print(pm.country ?? "")
                            print(pm.locality ?? "")
                           print(pm.subLocality ?? "")
                           print(pm.thoroughfare ?? "")
                            print(pm.postalCode ?? "")
                            print(pm.subThoroughfare ?? "")
                            var addressString : String = ""
                            if pm.subLocality != nil {
                                addressString = addressString + pm.subLocality! + ", "
                            }
                            if pm.thoroughfare != nil {
                                addressString = addressString + pm.thoroughfare! + ", "
                            }
                            if pm.locality != nil {
                                addressString = addressString + pm.locality! + ", "
                                if pm.country != nil {
                                    addressString = addressString + pm.country! + ", "
                                    //uuuuu
                                    if(location_city != pm.locality!.trimmingCharacters(in: .whitespaces))
                                    {
                                        location_city=pm.locality!.trimmingCharacters(in: .whitespaces)
                                          DispatchQueue.main.async{
                                        self.GetBeeWatherDetails(district: pm.locality!, country: pm.country!)
                                        }
                                    }
                                }
    
                            }
    
                            if pm.postalCode != nil {
                                addressString = addressString + pm.postalCode! + " "
                            }
    
                        }
                    }
            })
    
        }
    
    }
    

提交回复
热议问题