Advertisement
Guest User

Untitled

a guest
Jul 22nd, 2019
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Swift 1.69 KB | None | 0 0
  1. let cource = VehicleModel.getCource(oldLatitude: oldLat, oldLongitude: oldLon, newLatitude: newLat, newLongitude: newLon)
  2.  
  3. extension VehicleModel {
  4.  
  5.     static func getCource(oldLatitude: Double, oldLongitude: Double, newLatitude: Double, newLongitude: Double) -> Double {
  6.         let oldLat = self.wrap180(degrees: oldLatitude)
  7.         let oldLon = self.wrap90(degrees: oldLongitude)
  8.        
  9.         let newLat = self.wrap180(degrees: newLatitude)
  10.         let newLon = self.wrap180(degrees: newLongitude)
  11.  
  12.         let fi1 = oldLat.toRadian()
  13.         let fi2 = newLat.toRadian()
  14.         let deltaS = (newLon - oldLon).toRadian()
  15.        
  16.         let deltaX = cos(fi1) * sin(fi2) - sin(fi1) * cos(fi2) * cos(deltaS)
  17.         let deltaY = sin(deltaS) * cos(fi2)
  18.         let bearing = atan2(deltaY, deltaX)
  19.        
  20.         return bearing.toDegrise()
  21.     }
  22. }
  23.  
  24. // MARK: - Helpers
  25. extension VehicleModel {
  26.     private static func wrap180(degrees: Double) -> Double {
  27.         if -180 < degrees && degrees <= 180 {
  28.             return degrees
  29.         }
  30.         return ((degrees+540).truncatingRemainder(dividingBy: 360)) - 180
  31.     }
  32.     private static func wrap90(degrees: Double) -> Double {
  33.         if (-90 < degrees) && (degrees <= 90) {
  34.             return degrees
  35.         }
  36.         let val = (degrees.truncatingRemainder(dividingBy: 360) + 270).truncatingRemainder(dividingBy: 360) - 180
  37.         return Double(abs(val)) - 90
  38.     }
  39.     private static func wrap360(degrees: Double) -> Double {
  40.         if (0 <= degrees) && (degrees < 360) {
  41.             return degrees
  42.         }
  43.         return (degrees.truncatingRemainder(dividingBy: 360) + 360).truncatingRemainder(dividingBy: 360)
  44.     }
  45. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement