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()
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)