]> www.average.org Git - loctrkd.git/commitdiff
Show coordinates on the map
authorEugene Crosser <crosser@average.org>
Thu, 5 May 2022 22:34:13 +0000 (00:34 +0200)
committerEugene Crosser <crosser@average.org>
Thu, 5 May 2022 22:34:13 +0000 (00:34 +0200)
gps303/mock.py
gps303/wsgateway.py
gps303/zmsg.py
webdemo/index.html

index 9652fc1c6baadd23883a10a7c57b4f61f00eaf18..058c74950b9fb85a39a1083abfae44728a3542a4 100644 (file)
@@ -3,7 +3,8 @@
 from datetime import datetime, timezone
 from logging import getLogger
 from os import umask
-from sys import argv, stdin
+import readline
+from sys import argv
 import zmq
 
 from . import common
@@ -20,11 +21,11 @@ def main(conf):
     umask(oldmask)
 
     while True:
-        line = stdin.readline()
-        line = line.rstrip("\r\n")
-        if not line:
+        try:
+            line = input("> ")
+        except EOFError:
             break
-        print(line.encode())
+        line = line.rstrip("\r\n")
         args = line.split(" ")
         imei = args[0]
         kwargs = dict([arg.split("=") for arg in args[1:]])
index 674a075ed22b6fffc54418c812c5e8413a9cdcdd..a4a0b6d441d31d8a42800adc3e3d77eebd196547 100644 (file)
@@ -37,6 +37,11 @@ def try_http(data, fd, e):
             fd,
             headers,
         )
+        try:
+            pos = resource.index("?")
+            resource = resource[:pos]
+        except ValueError:
+            pass
         if op == "GET":
             if htmldata is None:
                 return (
@@ -212,7 +217,6 @@ def runserver(conf):
             topoll = []
             tostop = []
             events = poller.poll(5000)
-            log.debug("got events: %s", events)
             for sk, fl in events:
                 if sk is zsub:
                     while True:
index 0ccef007db6a0ddc5a9491b6d661ec89a63c1a57..28c233a3cafe7b45f89fc6b0c44f94c8a98d5251 100644 (file)
@@ -145,7 +145,7 @@ class LocEvt(_Zmsg):
     @property
     def packed(self):
         return (
-            self.imei.encode()
+                ("0000000000000000" + self.imei)[-16:].encode()
             + dumps(
                 {
                     "devtime": str(self.devtime),
index 5567eed239127f8fab5507aced48ddb1e8140ff0..ad1152c89b7506f590f49e61609c23a0bf03aebd 100644 (file)
@@ -1,22 +1,84 @@
-<!DOCTYPE html>
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en-US" xml:lang="en-US">
 <head>
        <title>Location</title>
+       <script src="http://www.openlayers.org/api/OpenLayers.js"></script>
+       <script
+         src="https://www.openstreetmap.org/openlayers/OpenStreetMap.js">
+       </script>
        <script type="text/javascript">
+               const urlParams = new URLSearchParams(window.location.search);
+               const qimei = urlParams.get("imei");
                var sts;
-               var log;
                var ws;
+               var map;
+               var markers;
+               var icon;
 
                function init() {
+                       init_map();
                        sts = document.getElementById("sts");
                        sts.innerHTML = "uninitialized";
-                       log = document.getElementById("log");
-                       log.innerHTML = "top of log<br>";
                        imei = document.getElementById("imei");
                        send = document.getElementById("send");
+                       if (qimei) {
+                               imei.value = qimei;
+                       }
                        open_ws();
                }
 
+               function init_map() {
+                       map = new OpenLayers.Map ("map", {
+                                controls:[
+                                        new OpenLayers.Control.Navigation(),
+                                        new OpenLayers.Control.PanZoomBar(),
+                                        new OpenLayers.Control.LayerSwitcher(),
+                                        new OpenLayers.Control.Attribution()],
+                                maxExtent: new OpenLayers.Bounds(
+                                        -20037508.34,-20037508.34,
+                                        20037508.34,20037508.34),
+                                maxResolution: 156543.0399,
+                                numZoomLevels: 19,
+                                units: 'm',
+                                projection: new OpenLayers.Projection(
+                                                        "EPSG:900913"),
+                                displayProjection: new OpenLayers.Projection(
+                                                        "EPSG:4326")
+                        });
+                       layerMapnik =
+                         new OpenLayers.Layer.OSM.Mapnik("Mapnik");
+                        map.addLayer(layerMapnik)
+                       layerTransportMap =
+                         new OpenLayers.Layer.OSM.TransportMap("TransportMap");
+                        map.addLayer(layerTransportMap)
+                       layerCycleMap =
+                         new OpenLayers.Layer.OSM.CycleMap("CycleMap");
+                        map.addLayer(layerCycleMap);
+                       markers =
+                         new OpenLayers.Layer.Markers("Markers");
+                       map.addLayer(markers);
+
+                       var size = new OpenLayers.Size(21, 25);
+                       var offset = new OpenLayers.Pixel(-(size.w/2), -size.h);
+                       icon = new OpenLayers.Icon(
+       'https://www.openstreetmap.org/openlayers/img/marker.png',size,offset);
+
+                       var lonLat =
+                         new OpenLayers.LonLat(0, 0).transform(
+                           new OpenLayers.Projection("EPSG:4326"),
+                             map.getProjectionObject());
+                       map.setCenter(lonLat, 1);
+               }
+
+               function set_marker(lon, lat) {
+                       console.log("setting marker at " + lon + ", " + lat)
+                       var lonLat =
+                         new OpenLayers.LonLat(lon, lat).transform(
+                           new OpenLayers.Projection("EPSG:4326"),
+                             map.getProjectionObject());
+                       markers.addMarker(new OpenLayers.Marker(lonLat,icon));
+                       map.setCenter(lonLat, 16);
+               }
+
                function open_ws() {
                        ws = new WebSocket("ws://localhost:5049");
                        ws.onopen = ws_onopen;
                        sts.innerHTML = "open";
                        imei.disabled = false;
                        send.disabled = false;
+                       if (imei.value) {
+                               sendIMEI();
+                       }
                }
                function ws_onmessage(event) {
-                       console.log("message " + event);
-                       log.innerHTML += "message " + event.data + "<br>";
+                       console.log("message " + event.data);
+                       msg = JSON.parse(event.data)
+                       set_marker(+msg.longitude, +msg.latitude);
                }
                function ws_onerror(event) {
                        console.log("error " + event);
                <input type="button" id="send" name="send" value="Send"
                 onclick="sendIMEI()" disabled>
        </div>
-       <div style="width:100%; height:96%" id="log"></div>
-       <div style="width:100%; height:2%" id="sts"></div>
+       <div style="width:100%; height:97%" id="map"></div>
+       <div style="width:100%; height:1%" id="sts"></div>
 </body>
 </html>