]> www.average.org Git - loctrkd.git/blob - gps303/mkgpx.py
0d1fe8959b8dbf7ab4680d58b1360cf0b3ce0eae
[loctrkd.git] / gps303 / mkgpx.py
1 from datetime import datetime, timezone
2 from sqlite3 import connect
3 import sys
4
5 from .gps303proto import *
6 from .opencellid import qry_cell
7
8 db = connect(sys.argv[1])
9 c = db.cursor()
10 c.execute(
11     "select timestamp, imei, clntaddr, length, proto, payload from events"
12 )
13
14 print("""<?xml version="1.0"?>
15 <gpx version="1.1"
16 creator="gps303"
17 xmlns="http://www.topografix.com/GPX/1/1">
18   <name>Location Data</name>
19   <trk>
20     <name>Location Data</name>
21     <trkseg>
22 """)
23
24 for timestamp, imei, clntaddr, length, proto, payload in c:
25     msg = make_object(length, proto, payload)
26     if isinstance(msg, (WIFI_POSITIONING, WIFI_OFFLINE_POSITIONING)):
27         lat, lon = qry_cell(sys.argv[2], msg.mcc, msg.gsm_cells)
28         if lat is None or lon is None:
29             continue
30     elif isinstance(msg, (GPS_POSITIONING, GPS_OFFLINE_POSITIONING)):
31         lat, lon = msg.latitude, msg.longitude
32     else:
33         continue
34     isotime = datetime.fromtimestamp(timestamp).astimezone(tz=timezone.utc).isoformat()
35     isotime = isotime[:isotime.rfind(".")] + "Z"
36     trkpt = """      <trkpt lat="{}" lon="{}">
37           <time>{}</time>
38       </trkpt>""".format(lat, lon, isotime)
39     print(trkpt)
40     if False:
41         print(
42             datetime.fromtimestamp(timestamp)
43             .astimezone(tz=timezone.utc)
44             .isoformat(),
45             msg,
46         )
47 print("""    </trkseg>
48   </trk>
49 </gpx>""")