changeset 69:236834c5b7ba

Make LiveMap easier to use.
author Lewin Bormann <lbo@spheniscida.de>
date Fri, 04 Dec 2020 21:46:02 +0100
parents 93c64b78d129
children 6cd4c2120328
files assets/livemap.html
diffstat 1 files changed, 57 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/assets/livemap.html	Fri Dec 04 21:26:54 2020 +0100
+++ b/assets/livemap.html	Fri Dec 04 21:46:02 2020 +0100
@@ -5,8 +5,14 @@
         <title>GeoHub: LiveMap</title>
     </head>
     <body>
+    <script src="thirdparty/leaflet.js"></script>
 
-    <script src="thirdparty/leaflet.js"></script>
+    <span style="color: blue; font-weight: bold; margin-right: 3em;">GeoHub LiveMap</span>
+    <span id="inputFields">
+        Client: <input type="text" value="" id="inputClient" />
+        Secret: <input type="text" value="" id="inputSecret" />
+        <input type="button" value="Go!" id="inputGoButton" onclick="buttonGoClicked()" />
+    </span>
     <div id="mapid"> </div>
 
     <script>
@@ -25,8 +31,30 @@
 
     var urlParams = new URLSearchParams(window.location.search);
     var url = new URL(window.location);
-    var secret = urlParams.get('secret');
-    var client = urlParams.get('client');
+    var allMarkers = [];
+
+    function getClient() {
+        var inputClient = document.getElementById('inputClient');
+        var userClient = inputClient.value;
+        var urlClient = urlParams.get('client');
+
+        if (userClient.length == 0) {
+            inputClient.value = urlClient;
+            return urlClient;
+        }
+        return userClient;
+    }
+    function getSecret() {
+        var inputSecret = document.getElementById('inputSecret');
+        var userSecret = inputSecret.value;
+        var urlSecret = urlParams.get('secret');
+
+        if (userSecret.length == 0) {
+            inputSecret.value = urlSecret;
+            return urlSecret;
+        }
+        return userSecret;
+    }
 
     var current_marker = L.marker([0,0]).addTo(mymap);
     const circleProps = {color: 'blue', fillcColor: 'blue', fillOpacity: 0.5, radius: 3}
@@ -34,10 +62,17 @@
         var oldCoord = current_marker.getLatLng();
         current_marker.setLatLng(L.latLng(lat, lng));
         // Show last locations as blue points.
-        L.circle([oldCoord.lat, oldCoord.lng], circleProps).addTo(mymap);
+        var circle = L.circle([oldCoord.lat, oldCoord.lng], circleProps);
+        circle.addTo(mymap);
+        allMarkers.push(circle);
     }
 
-    xhrcallback = function(xhr) {
+    function clearAllMarkers() {
+        for (var i = 0; i < allMarkers.length; i++) {
+            allMarkers[i].remove();
+        }
+    }
+    function xhrcallback(xhr) {
         console.log('xhrcallback called.', xhr.readyState, xhr.status);
         if (xhr.readyState === XMLHttpRequest.DONE && xhr.status == 200) {
             const response = xhr.response;
@@ -49,7 +84,9 @@
                 if (features.length > 0) {
                     for (i = 1; i < features.length; i++) {
                         var coords = features[i]['geometry']['coordinates'];
-                        L.circle([coords[1], coords[0]], circleProps).addTo(mymap);
+                        var circle = L.circle([coords[1], coords[0]], circleProps);
+                        circle.addTo(mymap);
+                        allMarkers.push(circle);
                     }
                 }
 
@@ -66,8 +103,10 @@
     };
 
 
-    backfill = function(args) {
+    function backfill(args) {
         xhr = new XMLHttpRequest();
+        var client = getClient();
+        var secret = getSecret();
         var url = `../../geo/${client}/retrieve/last?secret=${secret}&limit=256`;
         console.log('Requesting URL (backfill) ' + url);
         xhr.responseType = 'json';
@@ -76,8 +115,10 @@
         xhr.send();
     }
 
-    waitforupdate = function() {
+    function waitforupdate() {
         xhr = new XMLHttpRequest();
+        var client = getClient();
+        var secret = getSecret();
         var secretparam = secret == null ? '' : `secret=${secret}`;
         var url = `../../geo/${client}/retrieve/live?${secretparam}&timeout=30`;
         console.log('Requesting URL ' + url);
@@ -87,6 +128,14 @@
         xhr.send();
     }
 
+    function buttonGoClicked() {
+        clearAllMarkers();
+        // Accelerate display.
+        backfill();
+    }
+
+    getClient();
+    getSecret();
     // Once data is backfilled, we wait for the update.
     backfill();