Подсчитайте расстояние на полилинии Swift - PullRequest
0 голосов
/ 12 марта 2019

Я создал карту, где вы можете нажать кнопку запуска.Затем приложение будет увеличивать ваше текущее местоположение, обновлять координаты каждые 10 секунд и вставлять в массив координат.Как только я нажимаю кнопку остановки, у меня появляется ломаная линия, которая рисует линии между всеми координатами.(Как на картинке ниже)

img

Итак, мой вопрос сейчас: Как я могу подсчитать расстояние, на котором была нарисована ломаная линия?

//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"

Я предполагаю, что я не могу использовать startResult.distnace (to: stopResult), потому что, если я пойду по кругу, километр покажет 0?право?Я не уверен, но это все еще не работает.Ничего не отображается при использовании кода, как я.

1 Ответ

1 голос
/ 12 марта 2019
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)
    }
}
...