]> www.average.org Git - loctrkd.git/blob - gps303/mkgpx.py
Rename gps303proto to zx303proto
[loctrkd.git] / gps303 / mkgpx.py
1 """ Example that produces gpx from events in evstore """
2
3 # run as:
4 # python -m gps303.mkgpx <sqlite-file> <IMEI>
5 # Generated gpx is emitted to stdout
6
7 from datetime import datetime, timezone
8 from sqlite3 import connect
9 import sys
10
11 from .zx303proto import *
12
13 db = connect(sys.argv[1])
14 c = db.cursor()
15 c.execute(
16     """select tstamp, is_incoming, packet from events
17        where imei = ?
18        and ((is_incoming = false and proto = ?) 
19          or (is_incoming = true and proto = ?))
20        order by tstamp""",
21     (sys.argv[2], proto_name(WIFI_POSITIONING), proto_name(GPS_POSITIONING)),
22 )
23
24 print(
25     """<?xml version="1.0"?>
26 <gpx version="1.1"
27 creator="gps303"
28 xmlns="http://www.topografix.com/GPX/1/1">
29   <name>Location Data</name>
30   <trk>
31     <name>Location Data</name>
32     <trkseg>
33 """
34 )
35
36 for tstamp, is_incoming, packet in c:
37     msg = parse_message(packet, is_incoming=is_incoming)
38     lat, lon = msg.latitude, msg.longitude
39     isotime = (
40         datetime.fromtimestamp(tstamp).astimezone(tz=timezone.utc).isoformat()
41     )
42     isotime = isotime[: isotime.rfind(".")] + "Z"
43     trkpt = """      <trkpt lat="{}" lon="{}">
44           <time>{}</time>
45       </trkpt>""".format(
46         lat, lon, isotime
47     )
48     print(trkpt)
49     if False:
50         print(
51             datetime.fromtimestamp(tstamp)
52             .astimezone(tz=timezone.utc)
53             .isoformat(),
54             msg,
55         )
56 print(
57     """    </trkseg>
58   </trk>
59 </gpx>"""
60 )