]> www.average.org Git - loctrkd.git/blobdiff - gps303/mkgpx.py
Multiprotocol support in zmq messages and storage
[loctrkd.git] / gps303 / mkgpx.py
index 40588a0885791b347d5f3fc2ddb0f43a1b560cb6..456b94f58c4e9d83f58f7b98569112f72c3c8e92 100644 (file)
@@ -1,16 +1,28 @@
+""" Example that produces gpx from events in evstore """
+
+# run as:
+# python -m gps303.mkgpx <sqlite-file> <IMEI>
+# Generated gpx is emitted to stdout
+
 from datetime import datetime, timezone
 from sqlite3 import connect
 import sys
 
 from .gps303proto import *
-from .opencellid import qry_cell
 
 db = connect(sys.argv[1])
 c = db.cursor()
-c.execute("select tstamp, packet from events where proto in ({})"
-        .format(", ".join([str(n) for n in (WIFI_POSITIONING.PROTO, WIFI_OFFLINE_POSITIONING.PROTO, GPS_POSITIONING.PROTO, GPS_OFFLINE_POSITIONING.PROTO)])))
+c.execute(
+    """select tstamp, is_incoming, packet from events
+       where imei = ?
+       and ((is_incoming = false and proto = ?) 
+         or (is_incoming = true and proto = ?))
+       order by tstamp""",
+    (sys.argv[2], proto_name(WIFI_POSITIONING), proto_name(GPS_POSITIONING)),
+)
 
-print("""<?xml version="1.0"?>
+print(
+    """<?xml version="1.0"?>
 <gpx version="1.1"
 creator="gps303"
 xmlns="http://www.topografix.com/GPX/1/1">
@@ -18,23 +30,21 @@ xmlns="http://www.topografix.com/GPX/1/1">
   <trk>
     <name>Location Data</name>
     <trkseg>
-""")
+"""
+)
 
-for tstamp, packet in c:
-    msg = parse_message(packet)
-    if isinstance(msg, (WIFI_POSITIONING, WIFI_OFFLINE_POSITIONING)):
-        lat, lon = qry_cell(sys.argv[2], msg.mcc, msg.gsm_cells)
-        if lat is None or lon is None:
-            continue
-    elif isinstance(msg, (GPS_POSITIONING, GPS_OFFLINE_POSITIONING)):
-        lat, lon = msg.latitude, msg.longitude
-    else:
-        continue
-    isotime = datetime.fromtimestamp(tstamp).astimezone(tz=timezone.utc).isoformat()
-    isotime = isotime[:isotime.rfind(".")] + "Z"
+for tstamp, is_incoming, packet in c:
+    msg = parse_message(packet, is_incoming=is_incoming)
+    lat, lon = msg.latitude, msg.longitude
+    isotime = (
+        datetime.fromtimestamp(tstamp).astimezone(tz=timezone.utc).isoformat()
+    )
+    isotime = isotime[: isotime.rfind(".")] + "Z"
     trkpt = """      <trkpt lat="{}" lon="{}">
           <time>{}</time>
-      </trkpt>""".format(lat, lon, isotime)
+      </trkpt>""".format(
+        lat, lon, isotime
+    )
     print(trkpt)
     if False:
         print(
@@ -43,6 +53,8 @@ for tstamp, packet in c:
             .isoformat(),
             msg,
         )
-print("""    </trkseg>
+print(
+    """    </trkseg>
   </trk>
-</gpx>""")
+</gpx>"""
+)