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 
} 

어떤 도움이 높게 평가된다. 사전에 감사합니다지도에서 두 지점 (LAT and LONG) 사이

+0

두 위치의 거리를 계산하고 싶습니까 (예 : LAT 및 LONG)? –

+0

예 .... 근본적으로는 거리가 주석의 부제에 표시됩니다. – Kamboh

답변

1

찾기의 거리 :

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 
} 

경우 의견을 자유롭게 : 이제 다음 주석의 자막에 거리를 표시 할 경우

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) 

추가 문제가 있으면

+0

도움을 주셔서 대단히 감사합니다 ... 그것은 나에게 매우 잘 작동합니다. 한 가지 더 ...... ...... – Kamboh

+0

@ Kamboh이 답이 문제를 해결하면 올바른 것으로 표시하고 upvote로 표시하여 다른 사람도 도움을받을 수 있도록해야합니다. 그리고 더 많은 문제를 물어 보는 것을 주저하지 말고 다음 호가 뭐니 뭐니해도 –

+0

나는 그것을 올바르게 표시하고 표를 붙였습니다. (stak의 통지에 따라 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