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")
22 pmods: List[ProtoModule] = []
26 conf: ConfigParser, opts: List[Tuple[str, str]], args: List[str]
30 cast(ProtoModule, import_module("." + modnm, __package__))
31 for modnm in conf.get("collector", "protocols").split(",")
33 db = connect(conf.get("storage", "dbfn"))
36 """select tstamp, is_incoming, proto, packet from events
37 where imei = ? and is_incoming = true
40 (args[0], "BS:UD", "BS:UD2"),
43 """<?xml version="1.0"?>
46 xmlns="http://www.topografix.com/GPX/1/1">
47 <name>Location Data</name>
49 <name>Location Data</name>
54 for tstamp, is_incoming, proto, packet in c:
56 if pmod.proto_handled(proto):
57 msg = pmod.parse_message(packet, is_incoming=is_incoming)
58 lat, lon = msg.latitude, msg.longitude
60 datetime.fromtimestamp(tstamp)
61 .astimezone(tz=timezone.utc)
64 isotime = isotime[: isotime.rfind(".")] + "Z"
65 trkpt = """ <trkpt lat="{}" lon="{}">
73 datetime.fromtimestamp(tstamp)
74 .astimezone(tz=timezone.utc)
85 if __name__.endswith("__main__"):
86 opts, args = getopt(argv[1:], "o:c:d")
87 main(common.init(log, opts=opts), opts, args)