iosswiftpolylinemkpolyline

Count distance on polyline swift


I've created a map where you can press a start button. The application will then zoom in to your current location, and update the coordinate every 10 second and insert into an array of coordinates. Once I press the stop button, I've a polyline which draws lines between all coordinates. (Like the image below)

img

So my question is now: How can I count the distance the polyline was drawn?

//Draw polyline on the map
let aPolyLine = MKPolyline(coordinates: self.locations, count: self.locations.count)

    //Adding polyline to mapview
    self.mapView.addOverlay(aPolyLine)

    let startResult = self.locations.startIndex
    let stopResult = self.locations.endIndex

    //Retrieve distance and convert into kilometers
    let distance = startResult.distance(to: stopResult)
    let result = Double(distance) / 1000
    let y = Double(round(10 * result)) / 10
    self.KiloMeters.text = String(y) + " km"

My guess is that I cannot use startResult.distnace(to: stopResult) because, if I walk in a circle, the kilometer will show 0? right? I'm not sure, but it still dosent work. Nothing is showing when using the code like I've.


Solution

  • class ViewController: UIViewController, CLLocationManagerDelegate, MKMapViewDelegate {
        // MARK: - Variables
        let locationManager = CLLocationManager()
    
        // MARK: - IBOutlet
        @IBOutlet weak var mapView: MKMapView!
    
        // MARK: - IBAction
        @IBAction func distanceTapped(_ sender: UIBarButtonItem) {
            let locations: [CLLocationCoordinate2D] = [...]
            var total: Double = 0.0
            for i in 0..<locations.count - 1 {
                let start = locations[i]
                let end = locations[i + 1]
                let distance = getDistance(from: start, to: end)
                total += distance
            }
            print(total)
        }
    
        func getDistance(from: CLLocationCoordinate2D, to: CLLocationCoordinate2D) -> CLLocationDistance {
            // By Aviel Gross
            // https://stackoverflow.com/questions/11077425/finding-distance-between-cllocationcoordinate2d-points
            let from = CLLocation(latitude: from.latitude, longitude: from.longitude)
            let to = CLLocation(latitude: to.latitude, longitude: to.longitude)
            return from.distance(from: to)
        }
    }