ogn-python/ogn_python/model/aircraft_beacon.py

148 wiersze
4.9 KiB
Python
Czysty Zwykły widok Historia

2018-01-21 20:06:27 +00:00
from sqlalchemy.sql import func
2015-10-30 20:19:03 +00:00
from .beacon import Beacon
2015-10-24 21:13:21 +00:00
from ogn_python import db
2019-02-10 12:25:24 +00:00
2015-10-24 21:13:21 +00:00
class AircraftBeacon(Beacon):
__tablename__ = "aircraft_beacons"
2015-10-24 21:13:21 +00:00
# Flarm specific data
2019-02-10 12:25:24 +00:00
address_type = db.Column(db.SmallInteger)
aircraft_type = db.Column(db.SmallInteger)
stealth = db.Column(db.Boolean)
address = db.Column(db.String)
climb_rate = db.Column(db.Float(precision=2))
turn_rate = db.Column(db.Float(precision=2))
signal_quality = db.Column(db.Float(precision=2))
error_count = db.Column(db.SmallInteger)
frequency_offset = db.Column(db.Float(precision=2))
gps_quality_horizontal = db.Column(db.SmallInteger)
gps_quality_vertical = db.Column(db.SmallInteger)
software_version = db.Column(db.Float(precision=2))
hardware_version = db.Column(db.SmallInteger)
real_address = db.Column(db.String(6))
signal_power = db.Column(db.Float(precision=2))
2017-10-03 12:14:48 +00:00
proximity = None
2018-09-03 17:58:35 +00:00
# Calculated values
2019-02-10 12:25:24 +00:00
distance = db.Column(db.Float(precision=2))
radial = db.Column(db.SmallInteger)
quality = db.Column(db.Float(precision=2)) # signal quality normalized to 10km
location_mgrs = db.Column(db.String(15)) # full mgrs (15 chars)
location_mgrs_short = db.Column(db.String(9)) # reduced mgrs (9 chars), e.g. used for melissas range tool
agl = db.Column(db.Float(precision=2))
# Relations
2019-02-10 12:25:24 +00:00
receiver_id = db.Column(db.Integer, db.ForeignKey('receivers.id', ondelete='SET NULL'))
receiver = db.relationship('Receiver', foreign_keys=[receiver_id], backref='aircraft_beacons')
2019-02-10 12:25:24 +00:00
device_id = db.Column(db.Integer, db.ForeignKey('devices.id', ondelete='SET NULL'))
device = db.relationship('Device', foreign_keys=[device_id], backref='aircraft_beacons')
# Multi-column indices
2019-02-10 12:25:24 +00:00
db.Index('ix_aircraft_beacons_receiver_id_distance', 'receiver_id', 'distance')
db.Index('ix_aircraft_beacons_device_id_timestamp', 'device_id', 'timestamp')
2018-01-21 20:06:27 +00:00
2015-10-24 21:13:21 +00:00
def __repr__(self):
return "<AircraftBeacon %s: %s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s>" % (
2015-11-15 18:31:58 +00:00
self.address_type,
self.aircraft_type,
self.stealth,
self.address,
self.climb_rate,
self.turn_rate,
self.signal_quality,
2015-11-15 18:31:58 +00:00
self.error_count,
self.frequency_offset,
2018-09-03 17:58:35 +00:00
self.gps_quality_horizontal,
self.gps_quality_vertical,
self.software_version,
self.hardware_version,
self.real_address,
self.signal_power,
self.distance,
2018-09-03 17:58:35 +00:00
self.radial,
2018-10-21 15:34:03 +00:00
self.quality,
self.location_mgrs,
self.location_mgrs_short)
@classmethod
2018-11-28 06:37:35 +00:00
def get_columns(self):
return ['location',
'altitude',
'name',
'dstcall',
'relay',
'receiver_name',
'timestamp',
'track',
'ground_speed',
2019-01-01 19:13:08 +00:00
2018-11-28 06:37:35 +00:00
#'raw_message',
#'reference_timestamp',
2019-01-01 19:13:08 +00:00
2018-11-28 06:37:35 +00:00
'address_type',
'aircraft_type',
'stealth',
'address',
'climb_rate',
'turn_rate',
'signal_quality',
'error_count',
'frequency_offset',
'gps_quality_horizontal',
'gps_quality_vertical',
'software_version',
'hardware_version',
'real_address',
'signal_power',
2019-01-01 19:13:08 +00:00
2018-11-28 06:37:35 +00:00
'distance',
'radial',
'quality',
'location_mgrs',
'location_mgrs_short']
2018-11-28 06:37:35 +00:00
def get_values(self):
return [
self.location_wkt,
2018-09-03 17:58:35 +00:00
int(self.altitude) if self.altitude else None,
self.name,
2018-01-19 18:14:57 +00:00
self.dstcall,
2018-04-28 09:43:45 +00:00
self.relay,
self.receiver_name,
self.timestamp,
self.track,
2017-06-03 13:25:29 +00:00
self.ground_speed,
2019-01-01 19:13:08 +00:00
2018-09-03 17:58:35 +00:00
#self.raw_message,
#self.reference_timestamp,
self.address_type,
self.aircraft_type,
self.stealth,
self.address,
2017-06-03 13:25:29 +00:00
self.climb_rate,
self.turn_rate,
self.signal_quality,
2018-01-19 18:14:57 +00:00
self.error_count,
self.frequency_offset,
2018-09-03 17:58:35 +00:00
self.gps_quality_horizontal,
self.gps_quality_vertical,
self.software_version,
self.hardware_version,
self.real_address,
2018-01-19 18:14:57 +00:00
self.signal_power,
self.distance,
2018-09-03 17:58:35 +00:00
self.radial,
2018-10-21 15:34:03 +00:00
self.quality,
self.location_mgrs,
self.location_mgrs_short]
2018-04-28 09:43:45 +00:00
2019-02-10 12:25:24 +00:00
db.Index('ix_aircraft_beacons_date_device_id_address', func.date(AircraftBeacon.timestamp), AircraftBeacon.device_id, AircraftBeacon.address)
db.Index('ix_aircraft_beacons_date_receiver_id_distance', func.date(AircraftBeacon.timestamp), AircraftBeacon.receiver_id, AircraftBeacon.distance)