def update_instr(hgt_spd, instruction): n_ins = len(instruction) cur_instruction = [] for k in range(n_ins): position = Spatial.Position(instruction[k][0][0], instruction[k][0][1], ALT_SCALE * hgt_spd[k]) cur_instruction.append( FlightTypes.Instruction(position, SPD_SCALE * hgt_spd[k + n_ins]) ) return cur_instruction
def stepToWaypoint(coreFunctions, timeStep, arrivalRadius, parameters, weather, airspace, state, instruction): #(coreFunctions:SimulationCoreFunctions) (timeStep:float<Hours>) (arrivalRadius:float<NauticalMiles>) #(parameters:FlightParameters) (weather:WeatherState) (airspace:Airspace) (state:FlightState) (instruction:Instruction) = (currentX, currentY, currentZ) = state.AircraftPosition (destinationX, destinationY, destinationZRaw) = instruction.Waypoint grossWeight = coreFunctions.WeightModel(parameters, state) destinationZ = coreFunctions.AltitudeLimiter(grossWeight, destinationZRaw) distanceRemaining = Spatial.calculateDistance1( Spatial.Location(currentX, currentY), Spatial.Location(destinationX, destinationY)) (cruiseBurn, groundVector, verticalCruiseFuelDiff, VerticalVelocity, airSpeed, messages) = \ calculateMovement(coreFunctions, parameters, weather, state, instruction) # assertNonNegative "cruiseBurn" cruiseBurn groundSpeed = Movement.calculateSpeed(groundVector) distanceTravelled = groundSpeed * timeStep reachedDestination = distanceRemaining <= (distanceTravelled + arrivalRadius) # print 'distanceRemaing: ' + str(distanceRemaining) + 'distanceTravelled: ' + str(distanceTravelled + arrivalRadius) (groundSpeedX, groundSpeedY) = groundVector (groundX, groundY) = (float(groundSpeedX * timeStep), float(groundSpeedY * timeStep)) elapsedRatio = 0.0 if distanceTravelled > 0.0: elapsedRatio = min(distanceRemaining, distanceTravelled) / distanceTravelled timeElapsed = elapsedRatio * timeStep climbTimeElapsed = 0.0 if math.fabs(VerticalVelocity) > 0.0: climbTimeElapsed = \ min(1.0, ((destinationZ - currentZ)/(VerticalVelocity * timeElapsed)) * timeElapsed) newPosition = Spatial.Position( currentX + groundX * elapsedRatio, currentY + groundY * elapsedRatio, currentZ + VerticalVelocity * climbTimeElapsed) totalFuelBurn = cruiseBurn * timeElapsed + verticalCruiseFuelDiff * climbTimeElapsed # print 'totalFuelBurn:' + str(totalFuelBurn) + 'curise:' + str(cruiseBurn * timeElapsed) + \ # 'verticalBurn:' + str(verticalCruiseFuelDiff * climbTimeElapsed) intersectedAirspace = Airspace.aircraftInAirspace(airspace, state.AircraftPosition, newPosition) timeInTurbulence = 0.0 if intersectedAirspace.TurbulentZone: timeInTurbulence = timeElapsed # Aircraft's new state return (reachedDestination, FlightTypes.FlightState(AircraftPosition=newPosition, AirSpeed=airSpeed, GroundSpeed=groundSpeed, TimeElapsed=timeElapsed, FuelConsumed=totalFuelBurn, IntersectedAirspace=intersectedAirspace, TimeElapsedInTurbulence=timeInTurbulence, Messages=[]))
def loadAirportsFromFile(file): f = csv.reader(open(file, 'rb'), delimiter=',') f.next() airports = {} for row in f: code = str(row[0]) airports[code] = Airport.Airport( Code=code, Position=Spatial.Position(float(row[1]), float(row[2]), float(row[3])), ArrivalDistance = float(row[4]), ArrivalAltitude = float(row[5])) return airports
def rowToFlightEntry (row): id = int(row[0]) position = Spatial.Position(float(row[1]), float(row[2]), float(row[3])) flightEntry = FlightEntry.FlightEntry(id, position, row[4], row[5], FlightTypes.Payload(int(row[6]), int(row[7])), float(row[8]), float(row[9]), float(row[10]), float(row[11]), float(row[12]), float(row[13])) costParameters = CostParameters.CostParameters( float(row[14]), float(row[15]), float(row[16]), float(row[17]), float(row[18]), float(row[19]), float(row[20]), float(row[21]), int(row[22]), float(row[23]), float(row[24])) return (flightEntry,costParameters)
def ConvertRawInstruction(projection, raw): #:RawInstruction) lambertCoordinates = (raw.Latitude, raw.Longitude) (easting,northing) = LambertConverter.toLambert(projection, lambertCoordinates) position = Spatial.Position(easting, northing, raw.Feet) return FlightTypes.Instruction(position, raw.Knots) # instruction