diff --git a/README.md b/README.md
index 28a973e..bbb692a 100644
--- a/README.md
+++ b/README.md
@@ -147,8 +147,9 @@ available commands:
[gateway]
run Run the aprs client.
- [igcexport]
- write Export igc file for
at .
+ [export]
+ cup Export receiver waypoints as '.cup'.
+ igc Export igc file for at .
[logbook]
compute_logbook Compute logbook.
diff --git a/ogn/commands/__init__.py b/ogn/commands/__init__.py
index 04719ca..2ce4e2f 100644
--- a/ogn/commands/__init__.py
+++ b/ogn/commands/__init__.py
@@ -1,6 +1,6 @@
from .database import manager as database_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 .stats import manager as stats_manager
from .flights import manager as flights_manager
@@ -11,7 +11,7 @@ manager = Manager()
manager.merge(database_manager, namespace='db')
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(stats_manager, namespace='stats')
manager.merge(flights_manager, namespace='flights')
diff --git a/ogn/commands/igcexport.py b/ogn/commands/export.py
similarity index 54%
rename from ogn/commands/igcexport.py
rename to ogn/commands/export.py
index bb377dc..daec62f 100644
--- a/ogn/commands/igcexport.py
+++ b/ogn/commands/export.py
@@ -1,5 +1,6 @@
import datetime
import re
+import csv
from aerofiles.igc import Writer
from manager import Manager
@@ -10,10 +11,52 @@ from ogn.model import AircraftBeacon, Device
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('date', help='date (format: yyyy-mm-dd)')
@manager.command
-def write(address, date):
+def igc(address, date):
"""Export igc file for at ."""
if not re.match('.{6}', address):
print("Address {} not valid.".format(address))