2013-09-01 39 views
7

Tôi có MKMapView có số UISearchBar ở trên cùng và tôi muốn người dùng có thể nhập địa chỉ và tìm địa chỉ đó và thả ghim vào địa chỉ đó. Những gì tôi không biết là làm thế nào để biến chuỗi địa chỉ thành kinh độ và vĩ độ, vì vậy tôi có thể làm cho một đối tượng CLLocation. Có ai biết làm thế nào tôi có thể làm điều này?Cách nhận toạ độ vĩ độ và vị trí dài từ chuỗi địa chỉ

+0

này không giúp đỡ, vì dữ liệu ông lấy có tọa độ cho các địa chỉ. Tôi cần một cách để tìm tọa độ cho địa chỉ, khi người dùng tìm kiếm địa chỉ. –

Trả lời

16

Bạn có thể tìm thấy câu trả lời trong câu hỏi này.

iOS - MKMapView place annotation by using address instead of lat/long Theo người dùng 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]; 
       } 
      } 
     ]; 

Một giải pháp rất đơn giản. Nhưng chỉ áp dụng trên iOS5.1 trở lên.

1

Đối 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

tôi đã sử dụng một cách tiếp cận tương tự như Vijay, nhưng phải điều chỉnh một dòng mã. region.center = placemark.region.center không hoạt động đối với tôi. Có lẽ mã của tôi giúp một ai đó cũng như:

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

điều này là dành cho bản đồ google (câu trả lời trong nhanh nhất 3) –

Các vấn đề liên quan