2013-09-01 17 views
7

Ich habe eine MKMapView, die eine UISearchBar auf der Oberseite hat, und ich möchte der Benutzer in der Lage sein, eine Adresse zu schreiben, und diese Adresse zu finden und einen Stift darauf fallen lassen. Was ich nicht weiß ist, wie man den Adress-String in Längen- und Breitengrad umwandelt, damit ich ein CLLocation Objekt machen kann. Weiß jemand wie ich das machen kann?Wie bekomme ich lat und lange Koordinaten von Adresse Zeichenfolge

+0

Dies hilft nicht, weil die Daten, die er ruft die Koordinaten für die Adressen hat. Ich brauche einen Weg, um die Koordinaten für die Adresse zu finden, wenn der Benutzer nach der Adresse sucht. –

Antwort

16

Sie können Ihre Antwort in dieser Frage finden.

iOS - MKMapView place annotation by using address instead of lat/long Von Benutzer Romes.

NSString *location = @"some address, state, and zip"; 
CLGeocoder *geocoder = [[CLGeocoder alloc] init]; 
     [geocoder geocodeAddressString:location 
      completionHandler:^(NSArray* placemarks, NSError* error){ 
       if (placemarks && placemarks.count > 0) { 
        CLPlacemark *topResult = [placemarks objectAtIndex:0]; 
        MKPlacemark *placemark = [[MKPlacemark alloc] initWithPlacemark:topResult]; 

        MKCoordinateRegion region = self.mapView.region; 
        region.center = placemark.region.center; 
        region.span.longitudeDelta /= 8.0; 
        region.span.latitudeDelta /= 8.0; 

        [self.mapView setRegion:region animated:YES]; 
        [self.mapView addAnnotation:placemark]; 
       } 
      } 
     ]; 

Eine sehr einfache Lösung. Aber nur für iOS5.1 oder höher.

1

Für swift2

var location: String = "some address, state, and zip" 
     var geocoder: CLGeocoder = CLGeocoder() 
     geocoder.geocodeAddressString(location,completionHandler: {(placemarks: [CLPlacemark]?, error: NSError?) -> Void in 
      if (placemarks?.count > 0) { 
       var topResult: CLPlacemark = (placemarks?[0])! 
       var placemark: MKPlacemark = MKPlacemark(placemark: topResult) 
       var region: MKCoordinateRegion = self.mapView.region 
       region.center = placemark.region.center 
       region.span.longitudeDelta /= 8.0 
       region.span.latitudeDelta /= 8.0 
       self.mapView.setRegion(region, animated: true) 
       self.mapView.addAnnotation(placemark) 
      } 
     }) 
2

verwendete ich einen ähnlichen Ansatz wie Vijay, hatte aber eine Zeile Code einzustellen. region.center = placemark.region.center hat nicht für mich funktioniert. Vielleicht hat jemand meinen Code hilft auch:

let location: String = "1 Infinite Loop, CA, USA" 
let geocoder: CLGeocoder = CLGeocoder() 
geocoder.geocodeAddressString(location,completionHandler: {(placemarks: [CLPlacemark]?, error: NSError?) -> Void in 
    if (placemarks?.count > 0) { 
     let topResult: CLPlacemark = (placemarks?[0])! 
     let placemark: MKPlacemark = MKPlacemark(placemark: topResult) 
     var region: MKCoordinateRegion = self.mapView.region 

     region.center.latitude = (placemark.location?.coordinate.latitude)! 
     region.center.longitude = (placemark.location?.coordinate.longitude)! 

     region.span = MKCoordinateSpanMake(0.5, 0.5) 

     self.mapView.setRegion(region, animated: true) 
     self.mapView.addAnnotation(placemark) 
    } 
}) 
0
func geoCodeUsingAddress(address: NSString) -> CLLocationCoordinate2D { 
    var latitude: Double = 0 
    var longitude: Double = 0 
    let addressstr : NSString = "http://maps.google.com/maps/api/geocode/json?sensor=false&address=\(address)" as NSString 
    let urlStr = addressstr.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) 
    let searchURL: NSURL = NSURL(string: urlStr! as String)! 
    do { 
     let newdata = try Data(contentsOf: searchURL as URL) 
     if let responseDictionary = try JSONSerialization.jsonObject(with: newdata, options: []) as? NSDictionary { 
      print(responseDictionary) 
      let array = responseDictionary.object(forKey: "results") as! NSArray 
      let dic = array[0] as! NSDictionary 
      let locationDic = (dic.object(forKey: "geometry") as! NSDictionary).object(forKey: "location") as! NSDictionary 
      latitude = locationDic.object(forKey: "lat") as! Double 
      longitude = locationDic.object(forKey: "lng") as! Double 
     } catch { 
     } 
    } 
    var center = CLLocationCoordinate2D() 
    center.latitude = latitude 
    center.longitude = longitude 
    return center 
} 
+0

dies ist für google map (antwort in Latest swift 3) –