From 5e6301f7492534a12c67404706945095accfe60e Mon Sep 17 00:00:00 2001 From: Sven Czarnian Date: Tue, 12 Oct 2021 22:27:02 +0200 Subject: [PATCH] parse the runways as well --- aman/formats/SctEseFormat.py | 33 ++++++++++++++++++++++++++++++--- 1 file changed, 30 insertions(+), 3 deletions(-) diff --git a/aman/formats/SctEseFormat.py b/aman/formats/SctEseFormat.py index de5b960..a5d54d5 100644 --- a/aman/formats/SctEseFormat.py +++ b/aman/formats/SctEseFormat.py @@ -3,6 +3,7 @@ import sys from aman.types.ArrivalRoute import ArrivalRoute +from aman.types.Runway import Runway from aman.types.Waypoint import Waypoint class SctEseFormat: @@ -32,9 +33,20 @@ class SctEseFormat: sys.exit(-1) return Waypoint(split[nameIdx], Waypoint.dms2dd(split[latitudeIdx]), Waypoint.dms2dd(split[longitudeIdx])) - def extractWaypoints(self, sctFilepath : str): + def parseRunway(runway : str): + split = list(filter(None, runway.split(' '))) + if 9 != len(split) or '' == split[8]: + return None, None, None + + waypoint0 = Waypoint(split[0], Waypoint.dms2dd(split[4]), Waypoint.dms2dd(split[5])) + waypoint1 = Waypoint(split[1], Waypoint.dms2dd(split[6]), Waypoint.dms2dd(split[7])) + + return split[8], Runway(waypoint0, waypoint1), Runway(waypoint1, waypoint0) + + def extractSctInformation(self, sctFilepath : str): config = SctEseFormat.readFile(sctFilepath) foundAirports = False + foundRunways = False foundVOR = False foundNDB = False foundFix = False @@ -48,6 +60,8 @@ class SctEseFormat: foundFix = True elif 'AIRPORT' == key: foundAirports = True + elif 'RUNWAY' == key: + foundRunways = True if False == foundVOR: sys.stderr.write('Unable to find VOR-entries in the sector file') @@ -61,6 +75,9 @@ class SctEseFormat: if False == foundAirports: sys.stderr.write('Unable to find AIRPORT-entries in the sector file') sys.exit(-1) + if False == foundRunways: + sys.stderr.write('Unable to find RUNWAY-entries in the sector file') + sys.exit(-1) # extract all waypoints for waypoint in config['VOR']: @@ -75,9 +92,18 @@ class SctEseFormat: # extract the airports for airport in config['AIRPORT']: - airport = SctEseFormat.parseWaypoint(airport,0, 2, 3) + airport = SctEseFormat.parseWaypoint(airport, 0, 2, 3) self.airports.setdefault(airport.name, []).append(airport) + # extract the runways + for runway in config['RUNWAY']: + airport, runway0, runway1 = SctEseFormat.parseRunway(runway) + if None != airport: + if not airport in self.runways: + self.runways.setdefault(airport, []) + self.runways[airport].append(runway0) + self.runways[airport].append(runway1) + def parseArrivalRoute(self, route : str, airport : Waypoint): # split the route and validate that it is a STAR for the airport split = route.split(':') @@ -147,6 +173,7 @@ class SctEseFormat: self.arrivalRoutes = {} self.waypoints = {} self.airports = {} + self.runways = {} - self.extractWaypoints(sctFilepath) + self.extractSctInformation(sctFilepath) self.extractArrivalRoutes(eseFilepath, airport, allowedRoutes)