Converting CLLocationCoordinate2d to Street Address with Swift
Asked Answered
T

2

6

Im trying to convert CLLocationCoordinates2d coordinates to a physical street address.

I have tried CLGeocoder with no luck. Here is my code that supplies the latitude and longitude coordinates.

    let manager = CLLocationManager()

func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation])
{

    guard let locValue: CLLocationCoordinate2D = manager.location?.coordinate else { return }
    print("locations = \(locValue.latitude) \(locValue.longitude)")
    // let locationtext = "locations = \(locValue.latitude) \(locValue.longitude)"
    locationTxt.text = "\(locValue.latitude) \(locValue.longitude)"

}

Thank you!

Tall answered 18/8, 2018 at 6:19 Comment(1)
Please show us your code that uses CLGeocoder.Mummy
B
9
func convertLatLongToAddress(latitude:Double,longitude:Double){
    
    let geoCoder = CLGeocoder()
    let location = CLLocation(latitude: latitude, longitude: longitude)
    geoCoder.reverseGeocodeLocation(location, completionHandler: { (placemarks, error) -> Void in
        
        // Place details
        var placeMark: CLPlacemark!
        placeMark = placemarks?[0]
        
        // Location name
        if let locationName = placeMark.location {
            print(locationName)
        }
        // Street address
        if let street = placeMark.thoroughfare {
            print(street)
        }
        // City
        if let city = placeMark.locality {
            print(city)
        }
        // State
        if let state = placemark.administrativeArea {
            print(state)
        }
        // Zip code
        if let zipCode = placeMark.postalCode {
            print(zipCode)
        }
        // Country
        if let country = placeMark.country {
            print(country)
        }
    })
    
}
Barberabarberry answered 18/8, 2018 at 6:26 Comment(8)
thanks for the fast reply! so im getting errors on geocoder and location. geoCoder CLGeocoder 0x00006040000171e0 and location CLLocation 0x00006040000170f0Tall
@Tall which error and on which line you getting error in my code let me know so i will check it againBarberabarberry
line 1 and 2 do i need to import anything else? import MapKit import CoreLocationTall
@Tall yes ofCourse u need to import CoreLocationBarberabarberry
i have that being imported currentlyTall
@Tall i have updated my answer kindly check it again and just put that function in your code and call it where you need by passing latitude and longitudeBarberabarberry
@Tall and i have tested it and it's working fine for meBarberabarberry
the if let zip = placeMark.isoCountryCode is misleading. isoCountryCode according to Apple Docs is the countries abbreviated name such as "UK" or "US" not the postal code. That property is postalCode. Also, the city isn't the subAdministrativeArea is the county that could contain a city. Subadministrative areas typically correspond to counties or other regions that are then organized into a larger administrative area or state.Catchfly
D
4

Yes you can get street address from Coordinates for that you need following code

func getAddressFromLatLon(Latitude: Double, Longitude: Double) {
    var center : CLLocationCoordinate2D = CLLocationCoordinate2D()


    let ceo: CLGeocoder = CLGeocoder()
    center.latitude = Latitude
    center.longitude = Longitude

    let loc: CLLocation = CLLocation(latitude:center.latitude, longitude: center.longitude)


    ceo.reverseGeocodeLocation(loc, completionHandler:
        {(placemarks, error) in
            if (error != nil)
            {
                print("reverse geodcode fail: \(error!.localizedDescription)")
            }
            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! + ", "
                }
                if pm.postalCode != nil {
                    addressString = addressString + pm.postalCode! + " "
                }


                print(addressString)
          }
    })

}

Call this function and pass parameter you can get address string. if not works then comment so i guide you further.

Debroahdebs answered 18/8, 2018 at 6:26 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.