From 10d06c2f676f5e48291fa86f937de329a8503222 Mon Sep 17 00:00:00 2001 From: Sven Czarnian Date: Wed, 13 Oct 2021 16:16:56 +0200 Subject: [PATCH] parse the constraints and create the waypoint list out of it --- aman/config/Airport.py | 63 +++++++++++++++++++++++++++++++++++++++--- 1 file changed, 59 insertions(+), 4 deletions(-) diff --git a/aman/config/Airport.py b/aman/config/Airport.py index a423f40..aed6871 100644 --- a/aman/config/Airport.py +++ b/aman/config/Airport.py @@ -9,6 +9,7 @@ from aman.config.RHC import RHC from aman.config.AirportSequencing import AirportSequencing from aman.config.RunwaySequencing import RunwaySequencing from aman.formats.SctEseFormat import SctEseFormat +from aman.types.Waypoint import Waypoint class Airport: def findGngData(data, path): @@ -103,11 +104,65 @@ class Airport: for i in range(0, len(dependencies), 2): self.DefaultSequencing.addDependency(dependencies[i], dependencies[i + 1]) - def parseConstraints(self, icao : str, planning): + def parseConstraints(self, planning): + self.ArrivalRouteConstraints = {} + for key in planning: if True == key.startswith('constraints'): star = key.replace('constraints', '').upper() - #print(star) + if '' != star: + elements = list(filter(None, planning[key].split(':'))) + if 3 > len(elements): + sys.stderr.write('Invalid constraint line: ' + key + '=' + planning[key]) + sys.exit(-1) + + waypoints = [] + + # values for the waypoint constraints + waypointName = elements[0] + constraints = [-1, -1] + isBaseTurn = False + isFinalTurn = False + + index = 1 + while index < len(elements): + if 'A' == elements[index] or 'S' == elements[index]: + if index + 1 == len(elements) or False == elements[index + 1].isnumeric(): + sys.stderr.write('Invalid constraint line: ' + key + '=' + planning[key]) + sys.exit(-1) + + if 'A' == elements[index]: + constraints[0] = int(elements[index + 1]) + else: + constraints[1] = int(elements[index + 1]) + index += 1 + elif 'B' == elements[index]: + isBaseTurn = True + elif 'F' == elements[index]: + isFinalTurn = True + else: + if False == isBaseTurn and False == isFinalTurn and -1 == constraints[0] and -1 == constraints[1] and '' == waypointName: + sys.stderr.write('Invalid constraint line: ' + key + '=' + planning[key]) + sys.exit(-1) + if True == isBaseTurn and True == isFinalTurn: + sys.stderr.write('Invalid constraint line: ' + key + '=' + planning[key]) + sys.exit(-1) + + waypoints.append(Waypoint(name = waypointName, base = isBaseTurn, final = isFinalTurn)) + if -1 != constraints[0]: + waypoints[-1].Altitude = constraints[0] + if -1 != constraints[1]: + waypoints[-1].Speed = constraints[1] + + # reset temporary data + waypointName = elements[index] + constraints = [-1, -1] + isBaseTurn = False + isFinalTurn = False + + index += 1 + + self.ArrivalRouteConstraints[star] = waypoints def __init__(self, filepath : str, icao : str): config = configparser.ConfigParser() @@ -157,6 +212,6 @@ class Airport: sys.exit(-1) self.GaforId = dataConfig['gaforid'] - # get the default sequencing data and constraints + # get the default sequencing data self.parseDefaultSequencingConfiguration(icao, planningConfig) - self.parseConstraints(icao, planningConfig) + self.parseConstraints(planningConfig)