+""" 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 .GT06mod import *
-from .opencellid import qry_cell
+from .gps303proto import *
db = connect(sys.argv[1])
c = db.cursor()
c.execute(
- "select timestamp, imei, clntaddr, length, proto, payload from events"
+ """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], WIFI_POSITIONING.PROTO, GPS_POSITIONING.PROTO),
)
-print("""<?xml version="1.0"?>
+print(
+ """<?xml version="1.0"?>
<gpx version="1.1"
creator="gps303"
xmlns="http://www.topografix.com/GPX/1/1">
<trk>
<name>Location Data</name>
<trkseg>
-""")
+"""
+)
-for timestamp, imei, clntaddr, length, proto, payload in c:
- msg = make_object(length, proto, payload)
- 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(timestamp).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(
- datetime.fromtimestamp(timestamp)
+ datetime.fromtimestamp(tstamp)
.astimezone(tz=timezone.utc)
.isoformat(),
msg,
)
-print(""" </trkseg>
+print(
+ """ </trkseg>
</trk>
-</gpx>""")
+</gpx>"""
+)