2014-10-06 29 views
5

ich eine Breite/Länge Lage, die ich an den Ort Namen String in Swift konvertieren möge. Was ist der beste Weg, dies zu tun? Ich glaube, es ist am besten, die reverseGeocodeLocation Funktion zu verwenden, aber nicht ganz sicher, wie. Das ist, was ich habe, so weit:Convert GPS-Koordinaten in eine Stadt Namen/Adresse in Swift

func locationManager(manager: CLLocationManager!, didUpdateLocations locations: [AnyObject]!) { 
    if (locationFixAchieved == false) { 
     locationFixAchieved = true 
     var locationArray = locations as NSArray 
     var locationObj = locationArray.lastObject as CLLocation 
     var coord = locationObj.coordinate 
     var latitude = coord.latitude 
     var longitude = coord.longitude 

     getCurrentWeatherData("\(longitude)", latitude: "\(latitude)") 
     reverseGeocodeLocation(location:coord, completionHandler: { (<#[AnyObject]!#>, <#NSError!#>) -> Void in 
      <#code#> 
     }) 

    } 
} 

func reverseGeocodeLocation(location: CLLocation!, completionHandler: CLGeocodeCompletionHandler!){ 

} 
+0

festen Händen, was ich versucht habe. Ich denke, ich habe reverseGeocodeLocation Funktion verwenden, aber nicht sicher, wie man –

Antwort

11

benötigen Sie den Code wie folgt zu schreiben:

geocoder.reverseGeocodeLocation(currentLocation, completionHandler: { 
      placemarks, error in 

       if error == nil && placemarks.count > 0 { 
        self.placeMark = placemarks.last as? CLPlacemark 
        self.adressLabel.text = "\(self.placeMark!.thoroughfare)\n\(self.placeMark!.postalCode) \(self.placeMark!.locality)\n\(self.placeMark!.country)" 
        self.manager.stopUpdatingLocation() 
       } 
      }) 
+1

würde ich nur hinzufügen, dass intead alle Komponenten Ortsmarkierungs anhängt, können Sie einfach verwenden: self.adressLabel.text = ABCreateStringWithAddressDictionary (self.placemark.addressDictionary !, false) für <= iOS 8 aus dem AdressBookUI Rahmen und CNPostaAddressFormatter aus dem Kontaktrahmen für> iOS 9.0 –

+0

Ah danke, ich wusste nicht, dass! – Ben

4

Bitte überprüfen Sie diese Antwort.

func getAddressFromGeocodeCoordinate(coordinate: CLLocationCoordinate2D) { 
    let geocoder = GMSGeocoder() 
    geocoder.reverseGeocodeCoordinate(coordinate) { response , error in 

     //Add this line 
     if let address = response!.firstResult() { 
     let lines = address.lines! as [String] 
     print(lines) 

     } 
    } 
    } 
0

Swift-Code-Adresse des Ortsmarke zu erhalten, schön Formatiert

let address = ABCreateStringWithAddressDictionary(placemark.addressDictionary!, false).componentsSeparatedByString("\n").joinWithSeparator(", ") 

print(address!) 
3

I Swift bin mit 3/XCode 8

Ich benutzte Benjamin Herzog's answer aber ich lief in einige Build-Fehler zu optional und Casting.

es im Umschreiben, habe ich beschlossen, es in einer Funktion zu kapseln und sie verallgemeinern, so dass es leicht in überall eingesteckt werden kann.

import CoreLocation 

func getPlacemark(forLocation location: CLLocation, completionHandler: @escaping (CLPlacemark?, String?) ->()) { 
    let geocoder = CLGeocoder() 

    geocoder.reverseGeocodeLocation(location, completionHandler: { 
     placemarks, error in 

     if let err = error { 
      completionHandler(nil, err.localizedDescription) 
     } else if let placemarkArray = placemarks { 
      if let placemark = placemarkArray.first { 
       completionHandler(placemark, nil) 
      } else { 
       completionHandler(nil, "Placemark was nil") 
      } 
     } else { 
      completionHandler(nil, "Unknown error") 
     } 
    }) 

} 

Mit ihm:

getPlacemark(forLocation: originLocation) { 
    (originPlacemark, error) in 
     if let err = error { 
      print(err) 
     } else if let placemark = originPlacemark { 
      // Do something with the placemark 
     } 
    }) 
} 
+0

Gut ein Mann !! Prost –