2016-12-09 3 views
1

Я хочу показать свое полное расстояние от моего текущего местоположения до другой точки, и я хочу, чтобы показания расстояния в подзаголовке Annotation. Вот мой код, но он не работает:показать расстояние по аннотации от текущего местоположения до другой точки

func shopDeal() { 
    var inKm = "" 
    let locationsq = 
     [["title": "Shop Deal","subtitle": "\(inKm) km", "latitude": 31.352792, "longitude": 74.253201], 
     ["title": "Shop Deal", "subtitle": "\(inKm) km", "latitude": 31.403563, "longitude": 74.258200]] 

    // Span 
    for location in locationsq { 
     let annotation = MKPointAnnotation() 
     annotation.title = location["title"] as? String 
     annotation.subtitle = location["subtitle"] as? String 
     annotation.coordinate = CLLocationCoordinate2D(latitude: location["latitude"] as! Double, longitude: location["longitude"] as! Double) 
     mapView.addAnnotation(annotation) 
     func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) { 

      let myCurrentLoc = locations[locations.count - 1] 
      let coor1 = CLLocation(latitude: annotation.coordinate.latitude, longitude: annotation.coordinate.longitude) 
      let coor2 = CLLocation (latitude: myCurrentLoc.coordinate.latitude, longitude: myCurrentLoc.coordinate.longitude) 

      let distanceInMeters:CLLocationDistance = coor1.distanceFromLocation(coor2) 

      inKm = String(format: "%.2f", distanceInMeters/1000) 

      print("\(inKm) km") 
     } 
    } 
    mapView.delegate = self 
} 

Любая помощь высоко ценится. Заранее спасибо

+0

Вы хотите рассчитать расстояние b/w two location (i.e- LAT и LONG)? –

+0

да .... но в основном я хочу, чтобы расстояние показывалось по подзаголовку аннотации ... – Kamboh

ответ

1

Finding Расстояние между двумя точками (LAT and LONG) на карте:

let coordinate1 = CLLocation(latitude: 5.0, longitude: 5.0) 
let coordinate2 = CLLocation(latitude: 5.0, longitude: 3.0) 
//Decalare distanceInMeters as global variables so that you can show distance on subtitles 
let distanceInMeters = coordinate1.distance(from: coordinate2) 

Теперь, если вы хотите, чтобы показать расстояние в подзаголовке аннотацию затем:

func mapView(mapView: MKMapView, viewForAnnotation annotation: MKAnnotation) -> MKAnnotationView? { 

    if annotation is MKUserLocation { 
      return nil 
    } 

    let reuseId = "pinIdentifier" 

    var pinView = mapView.dequeueReusableAnnotationViewWithIdentifier(reuseId) as? MKPinAnnotationView 
    if pinView == nil { 
     pinView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: reuseId) 
     pinView!.canShowCallout = true 
    } 
    else { 
     pinView!.annotation = annotation 
    } 

    //Adding Subtitle text 
    let subtitleView = UILabel() 
    //Decalare distanceInMeters as global variables so that you can show distance on subtitles 
    subtitleView.text = "\(distanceInMeters)" 
    pinView!.detailCalloutAccessoryView = subtitleView 

    return pinView 
} 

Прокоментируй если далее любой вопрос

+0

Большое вам спасибо за помощь ... это очень хорошо работает для меня ... еще одна вещь ...... – Kamboh

+0

@ Kamboh Если этот ответ решает вашу проблему, тогда вы должны пометить его как правильно, а также повысить его, чтобы другие могли также помочь в этом. И не стесняйтесь задавать больше проблем, скажите, что ваш следующий номер –

+0

Я пометил его правильно и проголосовал за него (что не могло показать, потому что я меньше 15 репутации в соответствии с уведомлением Стака) – Kamboh

0

Попробуйте это!

// 1. Get Source & Destination coordinates (Hard-cored here) 
let locSource : CLLocation = CLLocation.init(latitude: 17.428031, longitude: 78.377837) 
let locDestination : CLLocation = CLLocation.init(latitude: 17.441879, longitude: 78.429990) 


// 2. Find distance between the Source & Destination 
let nDistanceInMeters : CLLocationDistance = locSource.distance(from: locDestination) 
let nDistanceInKiloMeters : CLLocationDistance = nDistanceInMeters/1000.0; 

// 3. Convert to String 
let strDistanceInMeters : String = String.init(format: "%f", nDistanceInMeters) 
let strDistanceInKM : String = String.init(format: "%f", nDistanceInKiloMeters) 


// 4. Assign the calculated distance to your label, 
// Probably in mapView(mapView:viewForAnnotation annotation: 
lblDistanceLabelOnAnnotationView.text = strDistanceInKM 

Надеюсь, что это поможет!

+0

Полезно. Как я использую массив координат ...? показать расстояние в соответствии с каждой координатой? – Kamboh

Смежные вопросы