def readStdAlt(self, alt, step=1, unit=True): ''' returns a string reading the altitude properly, i.e. a QNH-aware reading in feet AMSL under TA, and a flight level above TA. altitude readings are rounded to closest "step hundred"; FL readings are rounded with given step (use step=None for no approximation even in feet) "ft" is appended to string if 'unit' parameter is set ''' amsl = alt.ftAMSL(self.QNH()) if amsl < self.transitionAltitude() + settings.altitude_tolerance: return '%d%s' % ( (amsl if step == None else rounded(amsl, 100 * step)), (' ft' if unit else '')) else: fl = alt.FL() return 'FL%03d' % (fl if step == None else rounded(fl, step))
def __init__(self, mhz): if isinstance(mhz, str): if '.' in mhz: dec_part = mhz.rsplit('.', maxsplit=1)[-1] if len(dec_part) == 2 and dec_part[ -1] in '27': # ._2 and ._7 endings are shortened 25kHz-step freq's mhz += '5' self.mhz = rounded(float(mhz), CommFrequency.spacing) if abs(self.mhz) < 1e-6: # freq not even 1 Hz raise ValueError('invalid near-zero comm frequency') else: self.mhz = mhz
def xpdrData(self): res = {} if self.params.XPDR_mode != '0': res[Xpdr.CODE] = self.params.XPDR_code res[Xpdr.IDENT] = self.params.XPDR_idents if self.params.XPDR_mode not in '0A': res[Xpdr.ALT] = StdPressureAlt( rounded(self.params.altitude.ft1013(), step=(100 if self.params.XPDR_mode == 'C' else 10))) if self.params.XPDR_mode not in '0AC': res[Xpdr.IAS] = self.params.ias res[Xpdr.GND] = self.xpdrGndBit() res[Xpdr.CALLSIGN] = self.identifier res[Xpdr.ACFT] = self.aircraft_type return res
def rounded(self, true_hdg, step=5): return Heading( rounded((self.trueAngle() if true_hdg else self.magneticAngle()), step), true_hdg)
def rounded(self, step=10): return Speed(rounded(self.kt, step))
def __str__(self): return '%d kt' % rounded(self.kt)