From: Eugene Crosser Date: Thu, 4 Aug 2022 22:42:38 +0000 (+0200) Subject: lookaside returns accuracy too X-Git-Tag: 1.94~1 X-Git-Url: http://www.average.org/gitweb/?p=loctrkd.git;a=commitdiff_plain;h=0ece7447743f85065ff4d41376b636303e7e2482 lookaside returns accuracy too --- diff --git a/loctrkd/googlemaps.py b/loctrkd/googlemaps.py index 6838324..b84b64d 100644 --- a/loctrkd/googlemaps.py +++ b/loctrkd/googlemaps.py @@ -53,10 +53,14 @@ def lookup( mnc: int, gsm_cells: List[Tuple[int, int, int]], wifi_aps: List[Tuple[str, int]], -) -> Tuple[float, float]: +) -> Tuple[float, float, float]: result = _lookup(mcc, mnc, gsm_cells, wifi_aps) if "location" in result: - return result["location"]["lat"], result["location"]["lng"] + return ( + result["location"]["lat"], + result["location"]["lng"], + result["accuracy"], + ) else: raise ValueError("google geolocation: " + str(result)) diff --git a/loctrkd/opencellid.py b/loctrkd/opencellid.py index ff193fd..e05648e 100644 --- a/loctrkd/opencellid.py +++ b/loctrkd/opencellid.py @@ -23,7 +23,7 @@ def shut() -> None: def lookup( mcc: int, mnc: int, gsm_cells: List[Tuple[int, int, int]], __: Any -) -> Tuple[float, float]: +) -> Tuple[float, float, float]: assert ldb is not None lc = ldb.cursor() lc.execute("""attach database ":memory:" as mem""") @@ -52,4 +52,4 @@ def lookup( nsigs = [1 / sig / sumsig for _, _, sig in data] avlat = sum([lat * nsig for (lat, _, _), nsig in zip(data, nsigs)]) avlon = sum([lon * nsig for (_, lon, _), nsig in zip(data, nsigs)]) - return avlat, avlon + return avlat, avlon, 99.9 # TODO estimate accuracy for real diff --git a/loctrkd/rectifier.py b/loctrkd/rectifier.py index c8f9912..585eb79 100644 --- a/loctrkd/rectifier.py +++ b/loctrkd/rectifier.py @@ -31,7 +31,7 @@ class QryModule: mnc: int, gsm_cells: List[Tuple[int, int, int]], wifi_aps: List[Tuple[str, int]], - ) -> Tuple[float, float]: + ) -> Tuple[float, float, float]: ... @@ -74,14 +74,18 @@ def runserver(conf: ConfigParser) -> None: zpub.send(Rept(imei=zmsg.imei, payload=rect.json).packed) elif isinstance(rect, HintReport): try: - lat, lon = qry.lookup( + lat, lon, acc = qry.lookup( rect.mcc, rect.mnc, rect.gsm_cells, list((mac, strng) for _, mac, strng in rect.wifi_aps), ) log.debug( - "Approximated lat=%s, lon=%s for %s", lat, lon, rect + "Approximated lat=%s, lon=%s, acc=%s for %s", + lat, + lon, + acc, + rect, ) if proto_needanswer.get(zmsg.proto, False): resp = Resp( @@ -94,7 +98,7 @@ def runserver(conf: ConfigParser) -> None: rept = CoordReport( devtime=rect.devtime, battery_percentage=rect.battery_percentage, - accuracy=None, + accuracy=acc, altitude=None, speed=None, direction=None,