Exemplo n.º 1
0
                                        arrivalAirport,
                                        arrival=True)
        arrivalRwy = get_rwy_from_iff(iff_data,
                                      callsign,
                                      bcnCode,
                                      natsSim,
                                      arrivalAirport,
                                      arrival=True)
        departureGate = get_random_gate(natsSim, arrivalAirport)
        departureRwy = get_random_runway(natsSim,
                                         arrivalAirport,
                                         arrival=False)
        result_generated = f.generate(4, departureAirport, arrivalAirport, "",
                                      arrivalGate, "", arrivalRwy)

        latstr = clsGeometry.convertLatLonDeg_to_degMinSecString(str(simLat))
        lonstr = clsGeometry.convertLatLonDeg_to_degMinSecString(str(simLon))
        elev = np.max([
            iff_data[3].loc[(iff_data[3].callsign == callsign) &
                            (iff_data[3].bcnCode == bcnCode),
                            'altitude'].iloc[0] / 100., 100.
        ])
        spd = iff_data[3].loc[(iff_data[3].callsign == callsign) &
                              (iff_data[3].bcnCode == bcnCode), 'tas'].iloc[0]
        hdg = iff_data[3].loc[(iff_data[3].callsign == callsign) &
                              (iff_data[3].bcnCode == bcnCode),
                              'heading'].iloc[0]
        aircraftType = 'B744'

        arrivalAirportElevation = natsSim.airportInterface.select_airport(
            arrivalAirport).getElevation()
Exemplo n.º 2
0
    def generate(self, flight_plan_type, origin_airport, destination_airport,
                 origin_gate, destination_gate, departure_runway,
                 arrival_runway):
        fp_generated = ""  # Reset

        self.starting_latitude = ""  # Reset
        self.starting_longitude = ""  # Reset

        tmp_departing_surface_plan_string = ""  # Reset
        tmp_landing_surface_plan_string = ""  # Reset

        departing_runway_entry = ""  # Reset
        landing_runway_end = ""  # Reset

        if flight_plan_type == self.FLIGHT_PLAN_TYPE_GATE_TO_GATE:
            if origin_airport is None or origin_airport == "" or destination_airport is None or destination_airport == "":
                print("Please input origin and destination airports")
                quit()

            if departure_runway is None or departure_runway == "" or arrival_runway is None or arrival_runway == "":
                print("Please input departure and arrival runways")
                quit()

            if origin_gate is None or origin_gate == "" or destination_gate is None or destination_gate == "":
                print("Please input origin and destination gates")
                quit()
        elif flight_plan_type == self.FLIGHT_PLAN_TYPE_RUNWAY_TO_RUNWAY:
            if origin_airport is None or origin_airport == "" or destination_airport is None or destination_airport == "":
                print("Please input origin and destination airports")
                quit()

            if departure_runway is None or departure_runway == "" or arrival_runway is None or arrival_runway == "":
                print("Please input departure and arrival runways")
                quit()
        elif flight_plan_type == self.FLIGHT_PLAN_TYPE_CRUISE:
            if origin_airport is None or origin_airport == "" or destination_airport is None or destination_airport == "":
                print("Please input origin and destination airports")
                quit()
        elif flight_plan_type == self.FLIGHT_PLAN_TYPE_CRUISE_TO_GATE:
            if origin_airport is None or origin_airport == "" or destination_airport is None or destination_airport == "":
                print("Please input origin and destination airports")
                quit()

            if arrival_runway is None or arrival_runway == "":
                print("Please input arrival runway")
                quit()

            if destination_gate is None or destination_gate == "":
                print("Please input destination gate")
        else:
            print("Please input valid flight plan type")
            quit()

        # =================================================

        self.str_readFlightPlan = self.readFlightPlan(origin_airport,
                                                      destination_airport)

        if (-1 < self.str_readFlightPlan.index(".")) and (
                self.str_readFlightPlan.index(".") <
                self.str_readFlightPlan.rindex(".")):
            self.enroute_fp = self.str_readFlightPlan[
                self.str_readFlightPlan.index(".") +
                1:self.str_readFlightPlan.rindex(".")]
        self.selected_takeoff = ''
        if flight_plan_type == self.FLIGHT_PLAN_TYPE_GATE_TO_GATE or flight_plan_type == self.FLIGHT_PLAN_TYPE_RUNWAY_TO_RUNWAY:
            self.result_terminalProcedure = self.getTerminalProcedures(
                origin_airport, destination_airport, departure_runway,
                arrival_runway)
            if len(self.result_terminalProcedure) == 4:
                self.selected_sid = self.result_terminalProcedure[0]
                self.selected_star = self.result_terminalProcedure[1]
                self.selected_approach = self.result_terminalProcedure[2]
                self.selected_takeoff = self.result_terminalProcedure[3]
            else:
                self.selected_sid = self.result_terminalProcedure[0]
                self.selected_star = self.result_terminalProcedure[1]
                self.selected_approach = self.result_terminalProcedure[2]
                self.selected_takeoff = ''

        if (self.enroute_fp.find("/.") == 0):
            self.enroute_fp = self.enroute_fp[2:]

        if flight_plan_type == self.FLIGHT_PLAN_TYPE_GATE_TO_GATE:
            tmp_node_seq = -1  # Reset
            tmp_node_seq_first_point = -1  # Reset

            # Obtain departing surface plan ---------------
            tmp_departing_surface_plan_string = self.generateDepartureTaxiPlan(
                origin_airport, departure_runway, origin_gate)

            # Obtain landing surface plan -----------------
            tmp_landing_surface_plan_string = self.generateArrivalTaxiPlan(
                destination_airport, arrival_runway, destination_gate)

        elif flight_plan_type == self.FLIGHT_PLAN_TYPE_RUNWAY_TO_RUNWAY:
            tmp_array_node_data = self.gnatsSim.airportInterface.getLayout_node_data(
                origin_airport)
            if not (tmp_array_node_data is None):
                for i in range(0, len(tmp_array_node_data)):
                    if (tmp_array_node_data[i][3]
                            == departure_runway) and (tmp_array_node_data[i][4]
                                                      == "Entry"):
                        self.starting_latitude = str(tmp_array_node_data[i][1])
                        self.starting_longitude = str(
                            tmp_array_node_data[i][2])
                        break

        elif (flight_plan_type == self.FLIGHT_PLAN_TYPE_CRUISE):
            tmp_first_waypoint = self.enroute_fp[:self.enroute_fp.find(".")]
            tmp_lat_lon = self.gnatsSim.terminalAreaInterface.getWaypoint_Latitude_Longitude_deg(
                tmp_first_waypoint)
            if not (tmp_lat_lon is None):
                self.starting_latitude = str(tmp_lat_lon[0])
                self.starting_longitude = str(tmp_lat_lon[1])
        elif (flight_plan_type == self.FLIGHT_PLAN_TYPE_CRUISE_TO_GATE):
            # Obtain landing surface plan -----------------
            tmp_landing_surface_plan_string = self.generateArrivalTaxiPlan(
                destination_airport, arrival_runway, destination_gate)

            tmp_first_waypoint = self.enroute_fp[:self.enroute_fp.find(".")]
            tmp_lat_lon = self.gnatsSim.terminalAreaInterface.getWaypoint_Latitude_Longitude_deg(
                tmp_first_waypoint)
            if not (tmp_lat_lon is None):
                self.starting_latitude = str(tmp_lat_lon[0])
                self.starting_longitude = str(tmp_lat_lon[1])

        # =================================================
        # Combine the final returning value
        fp_generated = origin_airport

        fp_generated = fp_generated + ".<"
        if not (tmp_departing_surface_plan_string == ""):
            fp_generated = fp_generated + tmp_departing_surface_plan_string
        fp_generated = fp_generated + ">"

        if not (departure_runway == ""):
            fp_generated = fp_generated + "." + departure_runway

        if not (self.selected_takeoff == ""):
            fp_generated = fp_generated + "." + self.selected_takeoff

        if (flight_plan_type == self.FLIGHT_PLAN_TYPE_GATE_TO_GATE) or (
                flight_plan_type == self.FLIGHT_PLAN_TYPE_RUNWAY_TO_RUNWAY):
            if not (self.selected_sid == ""):
                fp_generated = fp_generated + "." + self.selected_sid

        fp_generated = fp_generated + "." + self.enroute_fp

        if (flight_plan_type == self.FLIGHT_PLAN_TYPE_GATE_TO_GATE) or (
                flight_plan_type == self.FLIGHT_PLAN_TYPE_RUNWAY_TO_RUNWAY
        ) or (flight_plan_type == self.FLIGHT_PLAN_TYPE_CRUISE_TO_GATE):
            if not (self.selected_star == ""):
                fp_generated = fp_generated + "." + self.selected_star

            if not (self.selected_approach == ""):
                fp_generated = fp_generated + "." + self.selected_approach

        if not (arrival_runway == ""):
            fp_generated = fp_generated + "." + arrival_runway

        fp_generated = fp_generated + ".<"
        if not (tmp_landing_surface_plan_string == ""):
            fp_generated = fp_generated + tmp_landing_surface_plan_string
        fp_generated = fp_generated + ">"

        fp_generated = fp_generated + "." + destination_airport

        clsGeometry = JPackage('com').osi.util.Geometry

        if not (self.starting_latitude.strip()
                == "") and not (self.starting_longitude.strip() == ""):
            # Convert latitude/longitude degree string to degree-minute-second format
            self.starting_latitude = clsGeometry.convertLatLonDeg_to_degMinSecString(
                self.starting_latitude)
            self.starting_longitude = clsGeometry.convertLatLonDeg_to_degMinSecString(
                self.starting_longitude)

        return (fp_generated, self.starting_latitude, self.starting_longitude)