Browse Source

parse the runways as well

Sven Czarnian 3 years ago
parent
commit
5e6301f749
1 changed files with 30 additions and 3 deletions
  1. 30 3
      aman/formats/SctEseFormat.py

+ 30 - 3
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)