extend the airport configuration

This commit is contained in:
Sven Czarnian
2021-10-12 22:27:17 +02:00
parent 5e6301f749
commit 58d2f5f7f4

View File

@@ -5,7 +5,10 @@ import glob
import os import os
import sys import sys
from formats.SctEseFormat import SctEseFormat from aman.config.RHC import RHC
from aman.config.AirportSequencing import AirportSequencing
from aman.config.RunwaySequencing import RunwaySequencing
from aman.formats.SctEseFormat import SctEseFormat
class Airport: class Airport:
def findGngData(data, path): def findGngData(data, path):
@@ -30,6 +33,76 @@ class Airport:
return [] return []
return planning['routes'].split(':') return planning['routes'].split(':')
def parseDefaultSequencingConfiguration(self, icao : str, planning):
if None == planning.get('activearrivalrunwaydefault'):
sys.stderr.write('No "activearrivalrunwaydefault" entry found!')
sys.exit(-1)
if None == planning.get('activearrivalmodedefault'):
sys.stderr.write('No "activearrivalmodedefault" entry found!')
sys.exit(-1)
if None == planning.get('arrivalspacingdefault'):
sys.stderr.write('No "arrivalspacingdefault" entry found!')
sys.exit(-1)
if not icao in self.GngData.runways:
sys.stderr.write('Unable to find' + icao + 'in the SCT data!')
sys.exit(-1)
# parse the default arrival mode
if 'STAGGERED' == planning['activearrivalmodedefault']:
staggered = True
elif 'IPA' == planning['activearrivalmodedefault']:
staggered = False
else:
sys.stderr.write('Unknown arrival mode in "" found! (STAGGERED or IPA needs to be set)')
sys.exit(-1)
# translate the spacing into a map
ident = ''
spacings = {}
spacingConfig = list(filter(None, planning['arrivalspacingdefault'].split(':')))
for i in range(0, len(spacingConfig)):
if 0 == i % 2:
ident = spacingConfig[i]
elif '' != ident:
spacings[ident] = int(spacingConfig[i])
else:
sys.stderr.write('No runway defined in "arrivalspacingdefault"!')
sys.exit(-1)
# create the sequencing data per runway
self.DefaultSequencing = AirportSequencing(icao)
for ident in list(filter(None, planning['activearrivalrunwaydefault'].split(':'))):
if not ident in spacings:
sys.stderr.write('Unable to find sequencing data for ' + ident + ' of ' + icao)
sys.exit(-1)
found = False
for runway in self.GngData.runways[icao]:
if ident == runway.name:
sequence = RunwaySequencing(runway)
sequence.Spacing = spacings[ident]
self.DefaultSequencing.activateRunway(sequence)
found = True
break
if False == found:
sys.stderr.write('Unable to find the runway for ' + ident + ' of ' + icao + ' in SCT data!')
sys.exit(-1)
# create the dependencies, if needed
if True == staggered:
if None == planning.get('runwaydependenciesdefault'):
sys.stderr.write('Unable to find the runway dependencies for staggered approaches of ' + icao + '!')
sys.exit(-1)
dependencies = list(filter(None, planning['runwaydependenciesdefault'].split(':')))
if 0 != len(dependencies) % 2:
sys.stderr.write('No valid set of runway dependencies found!')
sys.exit(-1)
for i in range(0, len(dependencies), 2):
self.DefaultSequencing.addDependency(dependencies[i], dependencies[i + 1])
def __init__(self, filepath : str, icao : str): def __init__(self, filepath : str, icao : str):
self.arrivalRoutes = {} self.arrivalRoutes = {}
@@ -38,6 +111,7 @@ class Airport:
dataConfig = None dataConfig = None
planningConfig = None planningConfig = None
rhcConfig = None
# search the required sections # search the required sections
for key in config: for key in config:
@@ -45,6 +119,8 @@ class Airport:
dataConfig = config['DATA'] dataConfig = config['DATA']
elif 'PLANNING' == key: elif 'PLANNING' == key:
planningConfig = config['PLANNING'] planningConfig = config['PLANNING']
elif 'RHC' == key:
rhcConfig = config['RHC']
# find the GNG-file data # find the GNG-file data
sctFile, eseFile = Airport.findGngData(dataConfig, os.path.dirname(filepath)) sctFile, eseFile = Airport.findGngData(dataConfig, os.path.dirname(filepath))
@@ -61,6 +137,21 @@ class Airport:
sys.stderr.write('No valid planning configuration found') sys.stderr.write('No valid planning configuration found')
sys.exit(-1) sys.exit(-1)
# parse the RHC information
if None == rhcConfig:
sys.stderr.write('No RHC configuration found')
sys.exit(-1)
self.RecedingHorizonControl = RHC(rhcConfig)
# parse the GNG data # parse the GNG data
print('Used GNG-Data: ' + eseFile) print('Used GNG-Data: ' + eseFile)
self.gngData = SctEseFormat(sctFile, eseFile, icao, requiredArrivalRoutes) self.GngData = SctEseFormat(sctFile, eseFile, icao, requiredArrivalRoutes)
# get the GAFOR id
if None == dataConfig.get('gaforid'):
sys.stderr.write('No GAFOR-ID found!')
sys.exit(-1)
self.GaforId = dataConfig['gaforid']
# get the default sequencing data
self.parseDefaultSequencingConfiguration(icao, planningConfig)