Browse Source

fix the prediction calculation

Sven Czarnian 3 years ago
parent
commit
ad129dc2b6
1 changed files with 9 additions and 4 deletions
  1. 9 4
      aman/sys/aco/Node.py

+ 9 - 4
aman/sys/aco/Node.py

@@ -168,15 +168,20 @@ class Node:
             tempWaypoint = Waypoint(longitude = inbound.CurrentPosition.longitude, latitude = inbound.CurrentPosition.latitude)
             gs = inbound.Report.dynamics.groundSpeed * 0.514444 # ground speed in m/s
             distance = gs * timePrediction
-            self.PredictedCoordinate = tempWaypoint.project(course, distance)
+            prediction = tempWaypoint.project(course, distance)
 
             # calculate the bearing between the current position and the IAF
             star = Node.findArrivalRoute(inbound.Report.initialApproachFix, sequencingConfig.ActiveArrivalRunways[0].Runway, navData)
 
             # calculate the distance based on the flown distance and update the predicted distance
-            self.PredictedDistanceToIAF = Waypoint(longitude = self.PredictedCoordinate[1], latitude = self.PredictedCoordinate[0]).haversine(star.Route[0])
-            if 0.0 > self.PredictedDistanceToIAF:
-                self.PredictedDistanceToIAF = 0.0
+            if None != star:
+                bearing = Waypoint(longitude = prediction[1], latitude = prediction[0]).bearing(star.Route[0])
+                correctedDistance = math.cos(abs(bearing - course)) * distance * 0.000539957
+                self.PredictedDistanceToIAF -= correctedDistance
+                if 0.0 > self.PredictedDistanceToIAF:
+                    self.PredictedDistanceToIAF = 0.0
+
+                self.PredictedCoordinate = prediction
 
         # calculate the timings for the different arrival runways
         for identifier in sequencingConfig.ActiveArrivalRunways: