import datetime
import re
from aerofiles.igc import Writer
from manager import Manager
from ogn.commands.dbutils import session
from ogn.model import AircraftBeacon, Device
manager = Manager()
@manager.arg('address', help='address (flarm id)')
@manager.arg('date', help='date (format: yyyy-mm-dd)')
@manager.command
def write(address, date):
"""Export igc file for
at ."""
if not re.match('.{6}', address):
print("Address {} not valid.".format(address))
return
if not re.match('\d{4}-\d{2}-\d{2}', date):
print("Date {} not valid.".format(date))
return
device_id = session.query(Device.id) \
.filter(Device.address == address) \
.first()
if (device_id is None):
print("Device with address '{}' not found.".format(address))
return
with open('sample.igc', 'wb') as fp:
writer = Writer(fp)
writer.write_headers({
'manufacturer_code': 'OGN',
'logger_id': 'OGN',
'date': datetime.date(1987, 2, 24),
'fix_accuracy': 50,
'pilot': 'Konstantin Gruendger',
'copilot': '',
'glider_type': 'Duo Discus',
'glider_id': 'D-KKHH',
'firmware_version': '2.2',
'hardware_version': '2',
'logger_type': 'LXNAVIGATION,LX8000F',
'gps_receiver': 'uBLOX LEA-4S-2,16,max9000m',
'pressure_sensor': 'INTERSEMA,MS5534A,max10000m',
'competition_id': '2H',
'competition_class': 'Doubleseater',
})
points = session.query(AircraftBeacon) \
.filter(AircraftBeacon.device_id == device_id) \
.filter(AircraftBeacon.timestamp > date + ' 00:00:00') \
.filter(AircraftBeacon.timestamp < date + ' 23:59:59') \
.order_by(AircraftBeacon.timestamp)
for point in points.all():
writer.write_fix(
point.timestamp.time(),
latitude=point.location.latitude,
longitude=point.location.longitude,
valid=True,
pressure_alt=point.altitude,
gps_alt=point.altitude,
)