2014-10-06 7 views
5

में किसी शहर के नाम/पते पर जीपीएस निर्देशांक कनवर्ट करें मेरे पास अक्षांश/देशांतर स्थान है जिसे मैं स्विफ्ट में स्थान नाम स्ट्रिंग में कनवर्ट करना चाहता हूं। इसे करने का बेहतरीन तरीका क्या है? मेरा मानना ​​है कि रिवर्स जिओकोड लोकेशन फ़ंक्शन का उपयोग करना सबसे अच्छा है, लेकिन बिल्कुल यह सुनिश्चित नहीं है कि कैसे करें।स्विफ्ट

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

संलग्न मैं क्या प्रयास किया है। मुझे लगता है कि मुझे रिवर्सजीओकोड लोकेशन फ़ंक्शन का उपयोग करना है, लेकिन यह सुनिश्चित नहीं है कि –

उत्तर

11

आप इस तरह कोड लिखने की जरूरत है::

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

कैसे मैं सभी प्लेमार्क घटकों को जोड़ने के उस इंटीड को जोड़ दूंगा, आप बस इसका उपयोग कर सकते हैं: self.adressLabel.text = ABCreateStringWithAddressDictionary (self.placemark.addressDictionary !, false) <= आईओएस 9.0 –

+0

के लिए संपर्क ढांचे से AdressBookUI ढांचे और CNPostaAddressFormatter से आईओएस 8 आह धन्यवाद, मुझे यह नहीं पता था! – Ben

4

कृपया इस जवाब की जांच यह वही है मैं अब तक है।

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

स्विफ्ट कोड स्थान-चिह्न का पता पाने के लिए, अच्छी तरह से प्रारूपित

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

print(address!) 
3

मैं स्विफ्ट 3 उपयोग कर रहा हूँ/XCode 8

मैं Benjamin Herzog's answer इस्तेमाल किया, लेकिन मैं संबंधित कुछ निर्माण त्रुटियों में भाग वैकल्पिक और कास्टिंग करने के लिए।

इसे फिर से लिखने में, मैंने इसे एक समारोह में encapsulate करने का फैसला किया और इसे सामान्यीकृत करने के लिए ताकि इसे आसानी से कहीं भी प्लग किया जा सके।

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") 
     } 
    }) 

} 

यह का उपयोग करना:

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

अच्छा एक आदमी !! चियर्स –