parse the constraints and create the waypoint list out of it

This commit is contained in:
Sven Czarnian
2021-10-13 16:16:56 +02:00
parent 17f11a640a
commit 10d06c2f67

View File

@@ -9,6 +9,7 @@ from aman.config.RHC import RHC
from aman.config.AirportSequencing import AirportSequencing from aman.config.AirportSequencing import AirportSequencing
from aman.config.RunwaySequencing import RunwaySequencing from aman.config.RunwaySequencing import RunwaySequencing
from aman.formats.SctEseFormat import SctEseFormat from aman.formats.SctEseFormat import SctEseFormat
from aman.types.Waypoint import Waypoint
class Airport: class Airport:
def findGngData(data, path): def findGngData(data, path):
@@ -103,11 +104,65 @@ class Airport:
for i in range(0, len(dependencies), 2): for i in range(0, len(dependencies), 2):
self.DefaultSequencing.addDependency(dependencies[i], dependencies[i + 1]) self.DefaultSequencing.addDependency(dependencies[i], dependencies[i + 1])
def parseConstraints(self, icao : str, planning): def parseConstraints(self, planning):
self.ArrivalRouteConstraints = {}
for key in planning: for key in planning:
if True == key.startswith('constraints'): if True == key.startswith('constraints'):
star = key.replace('constraints', '').upper() 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): def __init__(self, filepath : str, icao : str):
config = configparser.ConfigParser() config = configparser.ConfigParser()
@@ -157,6 +212,6 @@ class Airport:
sys.exit(-1) sys.exit(-1)
self.GaforId = dataConfig['gaforid'] self.GaforId = dataConfig['gaforid']
# get the default sequencing data and constraints # get the default sequencing data
self.parseDefaultSequencingConfiguration(icao, planningConfig) self.parseDefaultSequencingConfiguration(icao, planningConfig)
self.parseConstraints(icao, planningConfig) self.parseConstraints(planningConfig)