Пример #1
0
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    
Пример #2
0
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=[]))
Пример #3
0
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
Пример #4
0
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)
Пример #5
0
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