dummyDescentGlideSlope.buildSimulatedGlideSlope() firstGlideSlopeWayPoint = dummyDescentGlideSlope.getVertex(v=0).getWeight() print('=============== init aircraft state vector =================') casKnots = 107.0 casMetersPerSecond = casKnots * Knots2MetersPerSecond tasMetersPerSecond = atmosphere.cas2tas(casMetersPerSecond, 950.0, speed_units='m/s', altitude_units='m') elapsedTimeSeconds = 0.0 aircraft.initStateVector( elapsedTimeSeconds=elapsedTimeSeconds, trueAirSpeedMetersSecond=tasMetersPerSecond, altitudeMeanSeaLevelMeters=firstGlideSlopeWayPoint. getAltitudeMeanSeaLevelMeters(), deltaDistanceFlownMeters=0.0) aircraft.setApproachConfiguration(0.0) aircraftMassKilograms = 49000.0 aircraft.setAircraftMassKilograms(aircraftMassKilograms) print( '===================== final 3 degrees descending glide slope ================' ) descentGlideSlope = DescentGlideSlope(runway=arrivalRunway, aircraft=aircraft, arrivalAirport=arrivalAirport, descentGlideSlopeDegrees=3.0)
if (acBd.aircraftExists(aircraftIcaoCode) and acBd.aircraftPerformanceFileExists( acBd.getAircraftPerformanceFile(aircraftIcaoCode))): aircraft = BadaAircraft( aircraftIcaoCode, acBd.getAircraftPerformanceFile(aircraftIcaoCode), atmosphere, earth) aircraft.dump() assert not (aircraft is None) elapsedTimeSeconds = 0.0 deltaTimeSeconds = 1.0 aircraft.initStateVector(elapsedTimeSeconds=0.0, trueAirSpeedMetersSecond=0.0, airportFieldElevationAboveSeaLevelMeters=0.0) aircraft.setTargetCruiseFlightLevel(RequestedFlightLevel=310.0, departureAirportAltitudeMSLmeters=0.0) aircraft.setAircraftMassKilograms(aircraftMassKilograms=285700.0) aircraft.setTargetCruiseMach(cruiseMachNumber=0.8) tas = aircraft.getCurrentTrueAirSpeedMetersSecond() previousAltitudeMSLmeters = 0.0 t0 = time.clock() print('simulation start= {0} seconds'.format(t0)) print('=========== simulation start ==================') endOfSimulation = False currentPosition = departureAirport
if (acBd.aircraftExists(aircraftIcaoCode) and acBd.aircraftPerformanceFileExists( acBd.getAircraftPerformanceFile(aircraftIcaoCode))): aircraft = BadaAircraft( aircraftIcaoCode, acBd.getAircraftPerformanceFile(aircraftIcaoCode), atmosphere, earth) aircraft.dump() assert not (aircraft is None) elapsedTimeSeconds = 0.0 deltaTimeSeconds = 1.0 aircraft.initStateVector(elapsedTimeSeconds=0.0, trueAirSpeedMetersSecond=0.0, altitudeMeanSeaLevelMeters=0.0) aircraft.setTargetCruiseFlightLevel(RequestedFlightLevel=310.0, departureAirportAltitudeMSLmeters=0.0) aircraft.setAircraftMassKilograms(aircraftMassKilograms=64000.0) aircraft.setTargetCruiseMach(cruiseMach=0.8) tas = aircraft.getCurrentTrueAirSpeedMetersSecond() previousAltitudeMSLmeters = 0.0 t0 = time.clock() print('simulation start= {0} seconds'.format(t0)) print('=========== simulation start ==================') endOfSimulation = False currentPosition = departureAirport
def test_Two(self): t0 = time.clock() print ( " ========== Great Circle ======= time start= ", t0 ) atmosphere = Atmosphere() earth = Earth() print ( '==================== Great Circle ==================== '+ time.strftime("%c") ) acBd = BadaAircraftDatabase() aircraftICAOcode = 'A320' if acBd.read(): if ( acBd.aircraftExists(aircraftICAOcode) and acBd.aircraftPerformanceFileExists(aircraftICAOcode)): print ( '==================== aircraft found ==================== '+ time.strftime("%c") ) aircraft = BadaAircraft(ICAOcode = aircraftICAOcode, aircraftFullName = acBd.getAircraftFullName(aircraftICAOcode), badaPerformanceFilePath = acBd.getAircraftPerformanceFile(aircraftICAOcode), atmosphere = atmosphere, earth = earth) print ( aircraft ) else: print ( '==================== airport database ==================== '+ time.strftime("%c") ) airportsDB = AirportsDatabase() assert not(airportsDB is None) wayPointsDb = WayPointsDatabase() assert (wayPointsDb.read()) initialWayPoint = wayPointsDb.getWayPoint('TOU') finalWayPoint = wayPointsDb.getWayPoint('ALIVA') print ( initialWayPoint.getBearingDegreesTo(finalWayPoint) ) print ( finalWayPoint.getBearingDegreesTo(initialWayPoint) ) ''' departure ground run => initial speed is null ''' trueAirSpeedMetersSecond = 70.0 elapsedTimeSeconds = 0.0 aircraft.setCurrentAltitudeSeaLevelMeters( elapsedTimeSeconds = 0.0 , altitudeMeanSeaLevelMeters = 0.0, lastAltitudeMeanSeaLevelMeters = 0.0, targetCruiseAltitudeMslMeters = 10000.0) aircraft.initStateVector( elapsedTimeSeconds = 0.0, trueAirSpeedMetersSecond = 70.0, airportFieldElevationAboveSeaLevelMeters = 152.0) aircraft.setTargetCruiseFlightLevel(RequestedFlightLevel = 310, departureAirportAltitudeMSLmeters = 152.0) print ( "=========== simulated descent glide slope =========== " + time.strftime("%c") ) MarseilleMarignane = airportsDB.getAirportFromICAOCode('LFML') print ( '==================== runways database ==================== '+ time.strftime("%c") ) runWaysDatabase = RunWayDataBase() assert runWaysDatabase.read() runway = runWaysDatabase.getFilteredRunWays(airportICAOcode = 'LFML', runwayName = '') arrivalGroundRun = GroundRunLeg( runway = runway, aircraft = aircraft, airport = MarseilleMarignane ) touchDownWayPoint = arrivalGroundRun.computeTouchDownWayPoint() aircraft.setArrivalRunwayTouchDownWayPoint(touchDownWayPoint) threeDegreesGlideSlope = DescentGlideSlope(runway = runway, aircraft = aircraft, arrivalAirport = MarseilleMarignane ) threeDegreesGlideSlope.buildSimulatedGlideSlope(descentGlideSlopeSizeNautics = 5.0) approachWayPoint = threeDegreesGlideSlope.getLastVertex().getWeight() aircraft.setTargetApproachWayPoint(approachWayPoint) ''' ==================================''' greatCircle = GreatCircleRoute(initialWayPoint = initialWayPoint, finalWayPoint = finalWayPoint, aircraft = aircraft) distanceStillToFlyMeters = initialWayPoint.getDistanceMetersTo(approachWayPoint) greatCircle.computeGreatCircle( deltaTimeSeconds = 0.1, elapsedTimeSeconds = 0.0, distanceStillToFlyMeters = distanceStillToFlyMeters, distanceToLastFixMeters = distanceStillToFlyMeters) print ( 'main great circle length= ' + str(greatCircle.computeLengthMeters()) + ' meters' ) greatCircle.createKmlOutputFile() greatCircle.createXlsxOutputFile()
assert runWaysDB.read() arrivalRunway = runWaysDB.getFilteredRunWays( arrivalAirportCode, 'Landing', aircraft.WakeTurbulenceCategory) print(arrivalRunway) aircraft.setArrivalAirportElevationMeters( arrivalAirport.getFieldElevationAboveSeaLevelMeters()) CAS = aircraft.computeLandingStallSpeedCasKnots() TAS = cas2tas( cas=CAS, altitude=arrivalAirport.getFieldElevationAboveSeaLevelMeters(), temp='std', speed_units='kt', alt_units='m', temp_units=default_temp_units, ) aircraft.initStateVector(elapsedTimeSeconds=0.0, trueAirSpeedMetersSecond=TAS, altitudeMeanSeaLevelMeters=arrivalAirport. getFieldElevationAboveSeaLevelMeters(), deltaDistanceFlownMeters=0.0) aircraft.setLandingConfiguration(0.0) groundRun = GroundRunLeg(runway=arrivalRunway, aircraft=aircraft, airport=arrivalAirport) groundRun.buildArrivalGroundRun(0.0) groundRun.createXlsxOutputFile() groundRun.createKmlOutputFile()
class TestGreatCircleRoute(unittest.TestCase): def setUp(self) -> None: self.deltaTimeSeconds = 1.0 atmosphere = Atmosphere() earth = Earth() print('==================== Aircraft ==================== ' + time.strftime("%c")) acBd = BadaAircraftDatabase() aircraftICAOcode = 'A320' if acBd.read(): if (acBd.aircraftExists(aircraftICAOcode) and acBd.aircraftPerformanceFileExists(aircraftICAOcode)): print( '==================== aircraft found ==================== ' + time.strftime("%c")) self.aircraft = BadaAircraft( ICAOcode=aircraftICAOcode, aircraftFullName=acBd.getAircraftFullName( aircraftICAOcode), badaPerformanceFilePath=acBd.getAircraftPerformanceFile( aircraftICAOcode), atmosphere=atmosphere, earth=earth, windSpeedMetersPerSecond=None, windDirectionDegrees=None) print(self.aircraft) assert not (self.aircraft is None) def test_One(self): print('==================== departure airport ==================== ' + time.strftime("%c")) airportsDB = AirportsDatabase() assert (airportsDB.read()) CharlesDeGaulle = airportsDB.getAirportFromICAOCode('LFPG') print(CharlesDeGaulle) print('==================== arrival airport ==================== ' + time.strftime("%c")) MarseilleMarignane = airportsDB.getAirportFromICAOCode('LFML') print(MarseilleMarignane) print('==================== Great Circle ==================== ' + time.strftime("%c")) self.aircraft.setCurrentAltitudeSeaLevelMeters( elapsedTimeSeconds=0.0, altitudeMeanSeaLevelMeters=0.0, lastAltitudeMeanSeaLevelMeters=0.0, targetCruiseAltitudeMslMeters=10000.0) self.aircraft.initStateVector( elapsedTimeSeconds=0.0, trueAirSpeedMetersSecond=70.0, airportFieldElevationAboveSeaLevelMeters=152.0) self.aircraft.setTargetCruiseFlightLevel( RequestedFlightLevel=310, departureAirportAltitudeMSLmeters=152.0) print('==================== runways database ==================== ' + time.strftime("%c")) runWaysDatabase = RunWayDataBase() assert runWaysDatabase.read() arrivalRunway = runWaysDatabase.getFilteredRunWays( airportICAOcode='LFML', runwayName='') print('==================== Compute touch down ==================== ' + time.strftime("%c")) arrivalGroundRun = GroundRunLeg(runway=arrivalRunway, aircraft=self.aircraft, airport=MarseilleMarignane) touchDownWayPoint = arrivalGroundRun.computeTouchDownWayPoint() self.aircraft.setArrivalRunwayTouchDownWayPoint(touchDownWayPoint) print("=========== simulated descent glide slope =========== " + time.strftime("%c")) threeDegreesGlideSlope = DescentGlideSlope( runway=arrivalRunway, aircraft=self.aircraft, arrivalAirport=MarseilleMarignane) threeDegreesGlideSlope.buildSimulatedGlideSlope( descentGlideSlopeSizeNautics=5.0) approachWayPoint = threeDegreesGlideSlope.getLastVertex().getWeight() self.aircraft.setTargetApproachWayPoint(approachWayPoint) print('==================== Great Circle ==================== ' + time.strftime("%c")) greatCircle = GreatCircleRoute(initialWayPoint=CharlesDeGaulle, finalWayPoint=approachWayPoint, aircraft=self.aircraft) distanceStillToFlyMeters = CharlesDeGaulle.getDistanceMetersTo( approachWayPoint) greatCircle.computeGreatCircle( deltaTimeSeconds=1.0, elapsedTimeSeconds=0.0, distanceStillToFlyMeters=distanceStillToFlyMeters, distanceToLastFixMeters=distanceStillToFlyMeters) print('main great circle length= ' + str(greatCircle.computeLengthMeters()) + ' meters') greatCircle.createKmlOutputFile() greatCircle.createXlsxOutputFile() def test_Two(self): t0 = time.clock() print(" ========== Great Circle ======= time start= ", t0) atmosphere = Atmosphere() earth = Earth() print('==================== Great Circle ==================== ' + time.strftime("%c")) acBd = BadaAircraftDatabase() aircraftICAOcode = 'A320' if acBd.read(): if (acBd.aircraftExists(aircraftICAOcode) and acBd.aircraftPerformanceFileExists(aircraftICAOcode)): print( '==================== aircraft found ==================== ' + time.strftime("%c")) aircraft = BadaAircraft( ICAOcode=aircraftICAOcode, aircraftFullName=acBd.getAircraftFullName( aircraftICAOcode), badaPerformanceFilePath=acBd.getAircraftPerformanceFile( aircraftICAOcode), atmosphere=atmosphere, earth=earth, windSpeedMetersPerSecond=None, windDirectionDegrees=None) print(aircraft) print( '==================== airport database ==================== ' + time.strftime("%c")) airportsDB = AirportsDatabase() assert not (airportsDB is None) wayPointsDb = WayPointsDatabase() assert (wayPointsDb.read()) initialWayPoint = wayPointsDb.getWayPoint('TOU') finalWayPoint = wayPointsDb.getWayPoint('ALIVA') print(initialWayPoint.getBearingDegreesTo(finalWayPoint)) print(finalWayPoint.getBearingDegreesTo(initialWayPoint)) ''' departure ground run => initial speed is null ''' trueAirSpeedMetersSecond = 70.0 elapsedTimeSeconds = 0.0 aircraft.setCurrentAltitudeSeaLevelMeters( elapsedTimeSeconds=0.0, altitudeMeanSeaLevelMeters=0.0, lastAltitudeMeanSeaLevelMeters=0.0, targetCruiseAltitudeMslMeters=10000.0) aircraft.initStateVector( elapsedTimeSeconds=0.0, trueAirSpeedMetersSecond=70.0, airportFieldElevationAboveSeaLevelMeters=152.0) aircraft.setTargetCruiseFlightLevel( RequestedFlightLevel=310, departureAirportAltitudeMSLmeters=152.0) print("=========== simulated descent glide slope =========== " + time.strftime("%c")) MarseilleMarignane = airportsDB.getAirportFromICAOCode('LFML') print( '==================== runways database ==================== ' + time.strftime("%c")) runWaysDatabase = RunWayDataBase() assert runWaysDatabase.read() runway = runWaysDatabase.getFilteredRunWays(airportICAOcode='LFML', runwayName='') arrivalGroundRun = GroundRunLeg(runway=runway, aircraft=aircraft, airport=MarseilleMarignane) touchDownWayPoint = arrivalGroundRun.computeTouchDownWayPoint() aircraft.setArrivalRunwayTouchDownWayPoint(touchDownWayPoint) threeDegreesGlideSlope = DescentGlideSlope( runway=runway, aircraft=aircraft, arrivalAirport=MarseilleMarignane) threeDegreesGlideSlope.buildSimulatedGlideSlope( descentGlideSlopeSizeNautics=5.0) approachWayPoint = threeDegreesGlideSlope.getLastVertex( ).getWeight() aircraft.setTargetApproachWayPoint(approachWayPoint) ''' ==================================''' greatCircle = GreatCircleRoute(initialWayPoint=initialWayPoint, finalWayPoint=finalWayPoint, aircraft=aircraft) distanceStillToFlyMeters = initialWayPoint.getDistanceMetersTo( approachWayPoint) greatCircle.computeGreatCircle( deltaTimeSeconds=0.1, elapsedTimeSeconds=0.0, distanceStillToFlyMeters=distanceStillToFlyMeters, distanceToLastFixMeters=distanceStillToFlyMeters) print('main great circle length= ' + str(greatCircle.computeLengthMeters()) + ' meters') greatCircle.createKmlOutputFile() greatCircle.createXlsxOutputFile() def test_compute_great_circle(self): # print( # '==================== departure airport ==================== ' + time.strftime( # "%c")) # airportsDB = AirportsDatabase() # assert (airportsDB.read()) # # CharlesDeGaulle = airportsDB.getAirportFromICAOCode('LFPG') # print(CharlesDeGaulle) # # print( # '==================== arrival airport ==================== ' + time.strftime( # "%c")) # # MarseilleMarignane = airportsDB.getAirportFromICAOCode('LFML') # print(MarseilleMarignane) wayPointsDb = WayPointsDatabase() assert (wayPointsDb.read()) Exona = wayPointsDb.getWayPoint('EXONA') Rosal = wayPointsDb.getWayPoint('ROSAL') Santa = wayPointsDb.getWayPoint('SANTA') print('==================== Great Circle ==================== ' + time.strftime("%c")) self.aircraft.setCurrentAltitudeSeaLevelMeters( elapsedTimeSeconds=0.0, altitudeMeanSeaLevelMeters=0.0, lastAltitudeMeanSeaLevelMeters=0.0, targetCruiseAltitudeMslMeters=10000.0) self.aircraft.initStateVector( elapsedTimeSeconds=0.0, trueAirSpeedMetersSecond=70.0, airportFieldElevationAboveSeaLevelMeters=152.0) self.aircraft.setTargetCruiseFlightLevel( RequestedFlightLevel=310, departureAirportAltitudeMSLmeters=152.0) print('==================== runways database ==================== ' + time.strftime("%c")) # runWaysDatabase = RunWayDataBase() # assert runWaysDatabase.read() # arrivalRunway = runWaysDatabase.getFilteredRunWays( # airportICAOcode='LFML', runwayName='') print('==================== Compute touch down ==================== ' + time.strftime("%c")) # arrivalGroundRun = GroundRunLeg(runway=arrivalRunway, # aircraft=self.aircraft, # airport=MarseilleMarignane) # touchDownWayPoint = arrivalGroundRun.computeTouchDownWayPoint() # self.aircraft.setArrivalRunwayTouchDownWayPoint(touchDownWayPoint) print("=========== simulated descent glide slope =========== " + time.strftime("%c")) # threeDegreesGlideSlope = DescentGlideSlope(runway=arrivalRunway, # aircraft=self.aircraft, # arrivalAirport=MarseilleMarignane) # threeDegreesGlideSlope.buildSimulatedGlideSlope( # descentGlideSlopeSizeNautics=5.0) # approachWayPoint = threeDegreesGlideSlope.getLastVertex().getWeight() # self.aircraft.setTargetApproachWayPoint(approachWayPoint) print('==================== Great Circle ==================== ' + time.strftime("%c")) greatCircle = GreatCircleRoute(initialWayPoint=Exona, finalWayPoint=Rosal, aircraft=self.aircraft) distanceStillToFlyMeters = Exona.getDistanceMetersTo(Rosal) greatCircle.computeGreatCircle( deltaTimeSeconds=1.0, elapsedTimeSeconds=0.0, distanceStillToFlyMeters=distanceStillToFlyMeters, distanceToLastFixMeters=distanceStillToFlyMeters) greatCircle2 = GreatCircleRoute(initialWayPoint=Rosal, finalWayPoint=Santa, aircraft=self.aircraft) distanceStillToFlyMeters = Rosal.getDistanceMetersTo(Santa) greatCircle2.computeGreatCircle( deltaTimeSeconds=1.0, elapsedTimeSeconds=0.0, distanceStillToFlyMeters=distanceStillToFlyMeters, distanceToLastFixMeters=distanceStillToFlyMeters) greatCircle.addVertex(greatCircle2) print('main great circle length= ' + str(greatCircle.computeLengthMeters()) + ' meters') greatCircle.createKmlOutputFile() greatCircle.createXlsxOutputFile()
class TestTurnLegGreatCircleRoute(unittest.TestCase): def setUp(self) -> None: self.atmosphere = Atmosphere() self.earth = Earth() self.acBd = BadaAircraftDatabase() self.aircraftICAOcode = 'A320' self.deltaTimeSeconds = 1.0 assert self.acBd.read() assert self.acBd.aircraftExists(self.aircraftICAOcode) assert self.acBd.aircraftPerformanceFileExists(self.aircraftICAOcode) self.aircraft = BadaAircraft( ICAOcode=self.aircraftICAOcode, aircraftFullName=self.acBd.getAircraftFullName( self.aircraftICAOcode), badaPerformanceFilePath=self.acBd.getAircraftPerformanceFile( self.aircraftICAOcode), atmosphere=self.atmosphere, earth=self.earth, windSpeedMetersPerSecond=None, windDirectionDegrees=None) def test_turn_leg_fly_by_waypoint(self): wayPointsDb = WayPointsDatabase() assert (wayPointsDb.read()) # Exona = wayPointsDb.getWayPoint('EXONA') # Rosal = wayPointsDb.getWayPoint('ROSAL') # Santa = wayPointsDb.getWayPoint('SANTA') p1 = wayPointsDb.getWayPoint('LAMSO') p2 = wayPointsDb.getWayPoint('EVELI') # p2 = wayPointsDb.getWayPoint('BASNO') # p3 = wayPointsDb.getWayPoint('PAMPUS') # ret = wayPointsDb.insertWayPoint('ENKOS', "N31°40'58.50" + '"', "N31°40'58.50" + '"') # ret = wayPointsDb.insertWayPoint('ENKOS', "N52°40'41.26" + '"', "E5°14'35.75" + '"') # if wayPointsDb.hasWayPoint('ENKOS'): # self.assertFalse(ret, 'insertion not done') # exit(1) # else: # self.assertTrue(ret, 'insertion correct') p3 = wayPointsDb.getWayPoint('ENKOS') print(p1) print(p2) print(p3) # print(p4) self.aircraft.aircraftCurrentConfiguration = 'cruise' self.aircraft.initStateVector( elapsedTimeSeconds=0.0, trueAirSpeedMetersSecond=70.0, airportFieldElevationAboveSeaLevelMeters=10000.0) self.aircraft.setTargetCruiseFlightLevel( RequestedFlightLevel=310, departureAirportAltitudeMSLmeters=0.0) greatCircle = GreatCircleRoute(initialWayPoint=p1, finalWayPoint=p2, aircraft=self.aircraft) distanceStillToFlyMeters = p1.getDistanceMetersTo(p2) greatCircle.computeGreatCircle( deltaTimeSeconds=self.deltaTimeSeconds, elapsedTimeSeconds=p1.getElapsedTimeSeconds(), distanceStillToFlyMeters=distanceStillToFlyMeters, distanceToLastFixMeters=distanceStillToFlyMeters) finalRoute = greatCircle initialHeadingDegrees = p1.getBearingDegreesTo(p2) turn_leg = TurnLeg(initialWayPoint=p2, finalWayPoint=p3, initialHeadingDegrees=initialHeadingDegrees, aircraft=self.aircraft, reverse=False) last_gc_vertex = finalRoute.getLastVertex().getWeight() distance_to_fly = last_gc_vertex.getDistanceMetersTo(p3) turn_leg.buildTurnLeg( deltaTimeSeconds=self.deltaTimeSeconds, elapsedTimeSeconds=last_gc_vertex.getElapsedTimeSeconds(), distanceStillToFlyMeters=distance_to_fly, distanceToLastFixMeters=distance_to_fly) finalRoute.addGraph(turn_leg) last_turn_leg_vertex = turn_leg.getLastVertex().getWeight() # last_turn_leg_vertex = p2 greatCircle2 = GreatCircleRoute(initialWayPoint=last_turn_leg_vertex, finalWayPoint=p3, aircraft=self.aircraft) distanceStillToFlyMeters = last_turn_leg_vertex.getDistanceMetersTo(p3) greatCircle2.computeGreatCircle( deltaTimeSeconds=self.deltaTimeSeconds, elapsedTimeSeconds=last_turn_leg_vertex.getElapsedTimeSeconds(), distanceStillToFlyMeters=distanceStillToFlyMeters, distanceToLastFixMeters=distanceStillToFlyMeters) finalRoute.addGraph(greatCircle2) finalRoute.createKmlOutputFile() finalRoute.createXlsxOutputFile() self.aircraft.createStateVectorOutputFile( filePrefix='turn-leg-great-circle')
print ( '--------------- tas= {0:.2f} knots ----------------------'.format(tasKnots) ) aircraft = BadaAircraft(aircraftIcaoCode, acBd.getAircraftPerformanceFile(aircraftIcaoCode), atmosphere, earth) aircraft.dump() takeOffMassKilograms = 64000.0 aircraft.setAircraftMassKilograms(takeOffMassKilograms) RequestedFlightLevel = 310.0 fieldElevationAboveSeaLevelMeters = 150.0 aircraft.setTargetCruiseFlightLevel(RequestedFlightLevel, fieldElevationAboveSeaLevelMeters) tasMetersPerSecond = tasKnots * Knots2MetersPerSecond aircraft.initStateVector(elapsedTimeSeconds = 0.0, trueAirSpeedMetersSecond = tasMetersPerSecond, altitudeMeanSeaLevelMeters = 3000.0 * Meter2Feet, deltaDistanceFlownMeters = 0.0) aircraft.setCruiseConfiguration(elapsedTimeSeconds = 0.0) turnLeg = TurnLeg( initialWayPoint = departureAirport, finalWayPoint = arrivalAirport, initialHeadingDegrees = 215.0, finalHeadingDegrees = 180.0, aircraft = aircraft, reverse = False) distanceStillToFlyMeters = 700000.0 turnLeg.buildTurnLeg(elapsedTimeSeconds = 0.0, distanceStillToFlyMeters = distanceStillToFlyMeters) turnLeg.createKmlOutputFile() turnLeg.createXlsxOutputFile()