У меня есть приложение, в котором я вычисляю пройденное расстояние, как приложение Uber. Когда водитель начинает поездку, местоположение начинает меняться, даже если в поиске поездки указана начальная точка, водитель может решить пройти альтернативный маршрут или пройти длинные места и маршруты, потому что он / она не знает кратчайший маршрут, как тогда рассчитать общее расстояние.
Начальное местоположение - это место, где водитель нажимает кнопку запуска.
Конечное местоположение - это место, где водитель нажимает кнопку остановки
пока это мой код
public func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
lastLocation = locations.last!
endTrip(locations.last)
if !hasSetInitialLocation {
let camera = GMSCameraPosition.camera(withTarget: lastLocation!.coordinate, zoom: 17)
self.mapView.animate(to: camera)
hasSetInitialLocation = true
endTrip(lastLocation)
MqttManager.instance.connectToServer()
}
}
func endTrip(endLoaction: CLLocation) {
guard let statusChange = source.getStatusChange() else{return}
var distanceTraveled: Double = 0.0
let initialLocation = CLLocation(latitude: (statusChange.meta?.location?.lat)!, longitude: (statusChange.meta?.location?.lng)!)
let distance = initialLocation.distance(from: endLoaction)
distanceTraveled += distance
let distanceInKM = Utility.convertCLLocationDistanceToKiloMeters(targetDistance: distanceTraveled)
}
Как я могу рассчитать расстояние, чтобы отразить общее расстояние, пройденное водителем, поскольку может произойти изменение маршрута от предложенной начальной и конечной точки.
Водитель нажимает кнопку, называемую стартовым отключением, я хочу узнать расстояние от этого момента до момента, когда он нажимает кнопку, завершающую поездку
эта реализация может быть получена из аналогичного рабочего кода, подобного этому, но единственное отличие состоит в том, что они представляют собой кнопку запуска, которая передает координаты в этой точке, и координату остановки, которая является концом координаты.
enum DistanceValue: Int {
case meters, miles
}
func calculateDistanceBetweenLocations(_ firstLocation: CLLocation, secondLocation: CLLocation, valueType: DistanceValue) -> Double {
var distance = 0.0
let meters = firstLocation.distance(from: secondLocation)
distance += meters
switch valueType {
case .meters:
return distance
case .miles:
let miles = distance
return miles
}
}
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
if startLocation == nil {
startLocation = locations.first
} else if let location = locations.last {
runDistance += lastLocation.distance(from: location)
let calc = calculateDistanceBetweenLocations(lastLocation, secondLocation: location, valueType: .meters)
print("TOTAL LOC 1 \(calc)")
print("TOTAL LOC 2 \(runDistance)")
}
lastLocation = locations.last
}
как показано в моих заявлениях для печати print("TOTAL LOC 1 \(calc)")
print("TOTAL LOC 2 \(runDistance)")
как я могу сделать
calc
то же самое с runDistance
вот что напечатано в консоли
TOTAL LOC 10.29331530774379
TOTAL LOC 2 10.29331530774379
TOTAL LOC 2.2655118031831587
TOTAL LOC 2 12.558827110926948