kopia lustrzana https://github.com/glidernet/ogn-python
Added receiver waypoints as cup
rodzic
6522bce14d
commit
55bbcd8efc
|
@ -147,8 +147,9 @@ available commands:
|
||||||
[gateway]
|
[gateway]
|
||||||
run Run the aprs client.
|
run Run the aprs client.
|
||||||
|
|
||||||
[igcexport]
|
[export]
|
||||||
write Export igc file for <address> at <date>.
|
cup Export receiver waypoints as '.cup'.
|
||||||
|
igc Export igc file for <address> at <date>.
|
||||||
|
|
||||||
[logbook]
|
[logbook]
|
||||||
compute_logbook Compute logbook.
|
compute_logbook Compute logbook.
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
from .database import manager as database_manager
|
from .database import manager as database_manager
|
||||||
from .bulkimport import manager as bulkimport_manager
|
from .bulkimport import manager as bulkimport_manager
|
||||||
from .igcexport import manager as igcexport_manager
|
from .export import manager as export_manager
|
||||||
from .logbook import manager as logbook_manager
|
from .logbook import manager as logbook_manager
|
||||||
from .stats import manager as stats_manager
|
from .stats import manager as stats_manager
|
||||||
from .flights import manager as flights_manager
|
from .flights import manager as flights_manager
|
||||||
|
@ -11,7 +11,7 @@ manager = Manager()
|
||||||
|
|
||||||
manager.merge(database_manager, namespace='db')
|
manager.merge(database_manager, namespace='db')
|
||||||
manager.merge(bulkimport_manager, namespace='bulkimport')
|
manager.merge(bulkimport_manager, namespace='bulkimport')
|
||||||
manager.merge(igcexport_manager, namespace='igcexport')
|
manager.merge(export_manager, namespace='export')
|
||||||
manager.merge(logbook_manager, namespace='logbook')
|
manager.merge(logbook_manager, namespace='logbook')
|
||||||
manager.merge(stats_manager, namespace='stats')
|
manager.merge(stats_manager, namespace='stats')
|
||||||
manager.merge(flights_manager, namespace='flights')
|
manager.merge(flights_manager, namespace='flights')
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
import datetime
|
import datetime
|
||||||
import re
|
import re
|
||||||
|
import csv
|
||||||
|
|
||||||
from aerofiles.igc import Writer
|
from aerofiles.igc import Writer
|
||||||
from manager import Manager
|
from manager import Manager
|
||||||
|
@ -10,10 +11,52 @@ from ogn.model import AircraftBeacon, Device
|
||||||
manager = Manager()
|
manager = Manager()
|
||||||
|
|
||||||
|
|
||||||
|
@manager.command
|
||||||
|
def cup():
|
||||||
|
"""Export receiver waypoints as '.cup'."""
|
||||||
|
|
||||||
|
sql = """
|
||||||
|
SELECT
|
||||||
|
'OGN-' || sq.name AS name,
|
||||||
|
sq.name AS code,
|
||||||
|
c.iso2 AS country,
|
||||||
|
CASE WHEN sq.lat_deg < 10 THEN '0' ELSE '' END || CAST((sq.lat_deg*100 + sq.lat_min) AS decimal(18, 5)) || sq.lat_sig AS lat,
|
||||||
|
CASE WHEN sq.lon_deg < 10 THEN '00' WHEN sq.lon_deg < 100 THEN '0' ELSE '' END || CAST(sq.lon_deg*100 + sq.lon_min AS decimal(18, 5)) || sq.lon_sig AS lon,
|
||||||
|
altitude || 'm' AS elev,
|
||||||
|
'8' AS style,
|
||||||
|
'' AS rwdir,
|
||||||
|
'' AS rwlen,
|
||||||
|
'' AS freq,
|
||||||
|
'lastseen: ' || sq.lastseen::date || ', version: ' || sq.version || ', platform: ' || sq.platform AS desc
|
||||||
|
FROM (
|
||||||
|
SELECT
|
||||||
|
st_y(location) as lat,
|
||||||
|
CASE WHEN ST_Y(location) > 0 THEN 'N' ELSE 'S' END AS lat_sig,
|
||||||
|
FLOOR(ABS(ST_Y(location))) AS lat_deg,
|
||||||
|
60*(ABS(ST_Y(location)) - FLOOR(ABS(ST_Y(location)))) AS lat_min,
|
||||||
|
st_x(location) AS lon,
|
||||||
|
CASE WHEN ST_X(location) > 0 THEN 'E' ELSE 'W' END AS lon_sig,
|
||||||
|
FLOOR(ABS(ST_X(location))) AS lon_deg,
|
||||||
|
60*(ABS(ST_X(location)) - FLOOR(ABS(ST_X(location)))) AS lon_min
|
||||||
|
, *
|
||||||
|
FROM receivers
|
||||||
|
WHERE lastseen - firstseen > INTERVAL'3 MONTH' AND lastseen > '2018-01-01 00:00:00' AND name NOT LIKE 'FNB%'
|
||||||
|
) sq
|
||||||
|
INNER JOIN countries c ON c.gid = sq.country_id
|
||||||
|
ORDER BY sq.name;
|
||||||
|
"""
|
||||||
|
results = session.execute(sql)
|
||||||
|
|
||||||
|
with open('receivers.cup', 'w') as outfile:
|
||||||
|
outcsv = csv.writer(outfile)
|
||||||
|
outcsv.writerow(results.keys())
|
||||||
|
outcsv.writerows(results.fetchall())
|
||||||
|
|
||||||
|
|
||||||
@manager.arg('address', help='address (flarm id)')
|
@manager.arg('address', help='address (flarm id)')
|
||||||
@manager.arg('date', help='date (format: yyyy-mm-dd)')
|
@manager.arg('date', help='date (format: yyyy-mm-dd)')
|
||||||
@manager.command
|
@manager.command
|
||||||
def write(address, date):
|
def igc(address, date):
|
||||||
"""Export igc file for <address> at <date>."""
|
"""Export igc file for <address> at <date>."""
|
||||||
if not re.match('.{6}', address):
|
if not re.match('.{6}', address):
|
||||||
print("Address {} not valid.".format(address))
|
print("Address {} not valid.".format(address))
|
Ładowanie…
Reference in New Issue