def radar_magnetic_track(self): """ determine magnetic track from radar history """ # clear to go ? if len(self._lst_trail) < 3: # return return 0 # calculate position magnectic declination lf_dcl_mag = self._emula.model.geomag.GeoMag(self.pos.f_lat, self.pos.f_lng) assert lf_dcl_mag # cdbg.M_DBG.debug("lf_dcl_mag.dec:[{}]".format(lf_dcl_mag.dec)) # determine magnetic track from radar history # li_mag_trk = round(tmath.track(self._lst_trail[-1], self.pos) + self._airspace.f_variation, 0) # cdbg.M_DBG.debug("self.adiru.f_true_heading:[{}]".format(self.adiru.f_true_heading)) # determine magnetic track from radar history li_mag_trk = (round(tmath.track(self._lst_trail[-1], self.pos) + lf_dcl_mag.dec, 0) + 360) % 360 # cdbg.M_DBG.debug("li_mag_trk (2):[{}]".format(li_mag_trk)) # return return li_mag_trk
def makeApproach(self): """ DOCUMENT ME! """ # check input # assert f_control l_oXY = pxy.CPosXY(self._iMouseX, self._iMouseY) assert l_oXY is not None pos = self._viewport.translate_xy(l_oXY) l_fClosest_r = 1000000 l_sClosest = "" i = 0 while (self._airspace.arrivalRunway(i)): pos1 = self._airspace.getPosition(self._airspace.arrivalRunway(i)) d = tMath.distLL(pos, pos1) a = tMath.trackDelta( self._airspace.runway(self._airspace.arrivalRunway(i)).track(), tMath.track(pos, pos1)) r = d * tMath.dsin(abs(a)) if ((r < l_fClosest_r) and (abs(a) < 90)): l_sClosest = self._airspace.arrivalRunway(i) l_fClosest_r = r i += 1 self._s_approach = l_sClosest self._i_lateral_mode = self.C_LMODE_APP
def makeVector(self, f_iVal): """ DOCUMENT ME! """ # check input # assert f_control # M_LOG.debug("f_iVal....: " + str(f_iVal)) # M_LOG.debug("aoAircraft: " + str(len(self.__dct_flight))) # verifica se o índice é válido if (f_iVal < 0) or (f_iVal >= len(self.__dct_flight)): # cai fora... return # get mouse position l_XY = pxy.CPosXY(self._iMouseX, self._iMouseY) assert l_XY is not None # converte as coordenadas de tela para mapa l_pos = self.__viewport.translate_xy(l_XY) self.__f_radar_vector = tMath.track( self.__dct_flight[f_iVal].radarPosition(), l_pos) + self.__airspace.variation() l_iRem = int(self.__f_radar_vector * 10.) % 50 self.__f_radar_vector = int( self.__f_radar_vector) - (int(self.__f_radar_vector) % 5) if l_iRem >= 25: self.__f_radar_vector += 5. if self.__f_radar_vector > 360.: self.__f_radar_vector -= 360. if 0. == self.__f_radar_vector: self.__f_radar_vector = 360. self.__i_lateral_mode = self.C_LMODE_HDG
def makeRoute(self): """ DOCUMENT ME! """ # check input # assert f_control # get mouse position l_oXY = pxy.CPosXY(self._iMouseX, self._iMouseY) assert l_oXY is not None # converte as coordenadas de tela para mapa pos = self.__viewport.translate_xy(l_oXY) # inicia variáveis l_sClosest = "" l_fClosest_r = 1000000 # first arrival i = 0 srt = self.__airspace.arrival(0) # scan all arrival's while srt is not None: # init flag apply = False # first runway rw = 0 # scan all runway's while self.__airspace.arrivalRunway(rw): # arrival belongs to runway ? if srt.belongsToRunway(self.__airspace.arrivalRunway(rw)): # ok, found apply = True # next runway rw += 1 # no found any runway ? if not apply: # next arrival i += 1 srt = self.__airspace.arrival(i) # next loop continue n = 0 while srt.item(n) is not None: pos1 = self.__airspace.getPosition(srt.item(n)._sName) r = tMath.distLL(pos, pos1) if srt.item(n + 1): pos2 = self.__airspace.getPosition(srt.item(n + 1)._sName) rttrk = tMath.track(pos1, pos2) rtdist = tMath.distLL(pos1, pos2) mstrk = tMath.track(pos1, pos) tdelta = tMath.trackDelta(rttrk, mstrk) prog = tMath.distLL(pos, pos1) * tMath.dcos(tdelta) if ((prog > 0) and (prog < rtdist)): r = tMath.distLL(pos, pos1) * tMath.dsin(abs(tdelta)) # distância menor que a anterior ? if r < l_fClosest_r: # this is the new closest element l_sClosest = srt.getName() l_fClosest_r = r n += 1 # next arrival i += 1 srt = self.__airspace.arrival(i) # first transition i = 0 srt = self.__airspace.transition(0) # scan all transitions while srt is not None: # init flag apply = False # first runway rw = 0 # scan all runway's while self.__airspace.arrivalRunway(rw): # transition belongs to runway ? if srt.belongsToRunway(self.__airspace.arrivalRunway(rw)): # ok, found apply = True # next runway rw += 1 # no found any transition ? if not apply: # next transition i += 1 srt = self.__airspace.transition(i) # next loop continue n = 0 while srt.item(n): pos1 = self.__airspace.getPosition(srt.item(n)._sName) r = tMath.distLL(pos, pos1) if srt.item(n + 1): pos2 = self.__airspace.getPosition(srt.item(n + 1)._sName) rttrk = tMath.track(pos1, pos2) rtdist = tMath.distLL(pos1, pos2) mstrk = tMath.track(pos1, pos) tdelta = tMath.trackDelta(rttrk, mstrk) prog = tMath.distLL(pos, pos1) * tMath.dcos(tdelta) if ((prog > 0) and (prog < rtdist)): r = tMath.distLL(pos, pos1) * tMath.dsin(abs(tdelta)) if r < l_fClosest_r: l_sClosest = srt._sName() l_fClosest_r = r n += 1 # next transition i += 1 srt = self.__airspace.transition(i) self.__s_route = l_sClosest self.__i_lateral_mode = self.C_LMODE_RTE