Showing
1 changed file
with
51 additions
and
5 deletions
| ... | @@ -337,16 +337,42 @@ import CoreMotion | ... | @@ -337,16 +337,42 @@ import CoreMotion |
| 337 | } | 337 | } |
| 338 | 338 | ||
| 339 | private func calculateSpeed(lat1: Double, lon1: Double, lat2: Double, lon2: Double, timeDifferenceInSeconds: Double) -> Double { | 339 | private func calculateSpeed(lat1: Double, lon1: Double, lat2: Double, lon2: Double, timeDifferenceInSeconds: Double) -> Double { |
| 340 | - let distance = calculateDistance(lat1: lat1, lon1: lon1, lat2: lat2, lon2: lon2) | 340 | +// let distance = calculateDistance(lat1: lat1, lon1: lon1, lat2: lat2, lon2: lon2) |
| 341 | + let distance = distanceInKmBetweenEarthCoordinates(lat1: lat1, lon1: lon1, lat2: lat2, lon2: lon2) | ||
| 341 | // print("=== distance: ",distance) | 342 | // print("=== distance: ",distance) |
| 343 | + | ||
| 342 | return (distance / timeDifferenceInSeconds) * 3.6 // Convert to km/h | 344 | return (distance / timeDifferenceInSeconds) * 3.6 // Convert to km/h |
| 343 | } | 345 | } |
| 346 | + | ||
| 347 | + // MARK: distance implementation no1 ===> | ||
| 348 | +// private func calculateDistance(lat1: Double, lon1: Double, lat2: Double, lon2: Double) -> Double { | ||
| 349 | +// let x = (lon2 - lon1).toRadians() * cos(((lat1 + lat2) / 2).toRadians()) | ||
| 350 | +// let y = (lat2 - lat1).toRadians() | ||
| 351 | +// return sqrt(x * x + y * y) * EARTH_RADIUS | ||
| 352 | +// } | ||
| 353 | + // <=== | ||
| 354 | + | ||
| 355 | + // MARK: distance implementation no2 ===> | ||
| 356 | + func degreesToRadians(degrees: Double) -> Double { | ||
| 357 | + return degrees * Double.pi / 180 | ||
| 358 | + } | ||
| 359 | + | ||
| 360 | + func distanceInKmBetweenEarthCoordinates(lat1: Double, lon1: Double, lat2: Double, lon2: Double) -> Double { | ||
| 344 | 361 | ||
| 345 | - private func calculateDistance(lat1: Double, lon1: Double, lat2: Double, lon2: Double) -> Double { | 362 | + let earthRadiusKm: Double = 6371 |
| 346 | - let x = (lon2 - lon1).toRadians() * cos(((lat1 + lat2) / 2).toRadians()) | 363 | + |
| 347 | - let y = (lat2 - lat1).toRadians() | 364 | + let dLat = degreesToRadians(degrees: lat2 - lat1) |
| 348 | - return sqrt(x * x + y * y) * EARTH_RADIUS | 365 | + let dLon = degreesToRadians(degrees: lon2 - lon1) |
| 366 | + | ||
| 367 | + let lat1 = degreesToRadians(degrees: lat1) | ||
| 368 | + let lat2 = degreesToRadians(degrees: lat2) | ||
| 369 | + | ||
| 370 | + let a = sin(dLat/2) * sin(dLat/2) + | ||
| 371 | + sin(dLon/2) * sin(dLon/2) * cos(lat1) * cos(lat2) | ||
| 372 | + let c = 2 * atan2(sqrt(a), sqrt(1 - a)) | ||
| 373 | + return earthRadiusKm * c | ||
| 349 | } | 374 | } |
| 375 | + // <=== | ||
| 350 | 376 | ||
| 351 | // Orientation Observer | 377 | // Orientation Observer |
| 352 | func setupOrientationChangeDetection() { | 378 | func setupOrientationChangeDetection() { |
| ... | @@ -510,6 +536,26 @@ import CoreMotion | ... | @@ -510,6 +536,26 @@ import CoreMotion |
| 510 | mLatitude = location.coordinate.latitude | 536 | mLatitude = location.coordinate.latitude |
| 511 | mLongitude = location.coordinate.longitude | 537 | mLongitude = location.coordinate.longitude |
| 512 | } | 538 | } |
| 539 | + | ||
| 540 | + // MARK: distance implementation no3 ===> | ||
| 541 | + // Get the current location | ||
| 542 | +// if let currentLocation = locationManager.location { | ||
| 543 | +// // Get the speed in meters per second | ||
| 544 | +// let speed = currentLocation.speed | ||
| 545 | +// // Convert the speed to kilometers per hour | ||
| 546 | +// let speedInKmPerHour = speed * 3.6 | ||
| 547 | +// | ||
| 548 | +// if (speedInKmPerHour >= 0.0) { | ||
| 549 | +// mSpeed = speedInKmPerHour | ||
| 550 | +// } else { | ||
| 551 | +// mSpeed = 0.0 | ||
| 552 | +// } | ||
| 553 | +// | ||
| 554 | +// avgVelocityLabel.text = String(format: "%.1f", floor(mSpeed)) + " km/h" | ||
| 555 | +// | ||
| 556 | +//// print("=== speedInKmPerHour: ",String(format: "%.1f", floor(speedInKmPerHour)) + " km/h") | ||
| 557 | +// } | ||
| 558 | + // <=== | ||
| 513 | } | 559 | } |
| 514 | 560 | ||
| 515 | public func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) { | 561 | public func locationManager(_ manager: CLLocationManager, didFailWithError error: Error) { | ... | ... |
-
Please register or login to post a comment