1 """ Example that produces gpx from events in evstore """
4 # python -m loctrkd.mkgpx <IMEI>
5 # Generated gpx is emitted to stdout
7 from configparser import ConfigParser
8 from datetime import datetime, timezone
9 from getopt import getopt
10 from importlib import import_module
11 from logging import getLogger
12 from sqlite3 import connect
14 from typing import Any, cast, List, Tuple
17 from .protomodule import ProtoModule
19 log = getLogger("loctrkd/mkgpx")
23 conf: ConfigParser, opts: List[Tuple[str, str]], args: List[str]
25 db = connect(conf.get("storage", "dbfn"))
28 """select tstamp, is_incoming, proto, packet from events
29 where imei = ? and is_incoming = true
32 (args[0], "BS:UD", "BS:UD2"),
35 """<?xml version="1.0"?>
38 xmlns="http://www.topografix.com/GPX/1/1">
39 <name>Location Data</name>
41 <name>Location Data</name>
46 for tstamp, is_incoming, proto, packet in c:
47 pmod = common.pmod_for_proto(proto)
49 msg = pmod.parse_message(packet, is_incoming=is_incoming)
50 lat, lon = msg.latitude, msg.longitude
52 datetime.fromtimestamp(tstamp)
53 .astimezone(tz=timezone.utc)
56 isotime = isotime[: isotime.rfind(".")] + "Z"
57 trkpt = """ <trkpt lat="{}" lon="{}">
65 datetime.fromtimestamp(tstamp)
66 .astimezone(tz=timezone.utc)
77 if __name__.endswith("__main__"):
78 opts, args = getopt(argv[1:], "o:c:d")
79 main(common.init(log, opts=opts), opts, args)