diff --git a/docroot/last/index.html b/docroot/last/index.html index a73d7ff..012ea07 100644 --- a/docroot/last/index.html +++ b/docroot/last/index.html @@ -32,8 +32,15 @@ .latlon { color: gray; } + + - + + @@ -42,9 +49,26 @@ function loadMapsAPI() { var script = document.createElement('script'); script.type = 'text/javascript'; - script.src = 'https://maps.googleapis.com/maps/api/js?v=3' + - '&key=' + apiKey +'&callback=initialize'; - document.body.appendChild(script); + if (typeof apiKey != 'undefined' && apiKey != "" ) { + script.src = 'https://maps.googleapis.com/maps/api/js?v=3' + + '&key=' + apiKey +'&callback=initialize_googlemaps'; + } else { + $("head").append(""); + + // Dynamic script loading from http://stackoverflow.com/a/8578840 + (function(d, s, id){ + var js, fjs = d.getElementsByTagName(s)[0]; + if (d.getElementById(id)){ return; } + js = d.createElement(s); js.id = id; + js.onload = function(){ + initialize_leaflet(); + }; + js.src = "https://unpkg.com/leaflet@1.0.2/dist/leaflet.js"; + fjs.parentNode.insertBefore(js, fjs); + }(document, 'script', 'leaflet')); + } + + document.body.appendChild(script); } diff --git a/docroot/last/functions.js b/docroot/last/map_google.js similarity index 99% rename from docroot/last/functions.js rename to docroot/last/map_google.js index 0673b35..3b56d1c 100644 --- a/docroot/last/functions.js +++ b/docroot/last/map_google.js @@ -3,7 +3,7 @@ var do_fit = false; var markers = {}; var livemarkers = true; -function initialize() { +function initialize_googlemaps() { var lat = 50.098280; var lon = 10.187189; var params = getSearchParameters(); diff --git a/docroot/last/map_leaflet.js b/docroot/last/map_leaflet.js new file mode 100644 index 0000000..ce18061 --- /dev/null +++ b/docroot/last/map_leaflet.js @@ -0,0 +1,85 @@ + +function initialize_leaflet() { + var markerLayer; + var markers={}; + var map = L.map('map-canvas').setView([0.0, 0.0], 1); + + L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { + attribution: '© OpenStreetMap contributors' + }).addTo(map); + + function osm_map_marker(loc) + { + console.log("Updating marker"); + var id = loc.topic.replace(/\//g, '-'); + + if (!markers.hasOwnProperty(id)) { + markers[id] = L.marker([loc.lat, loc.lon]); + markerLayer.addLayer(markers[id]); + if (loc.face) { + markers[id]._face=loc.face; + } + } + + markers[id].setLatLng({lat: loc.lat, lng: loc.lon}); + loc.face=markers[id]._face; + var description = formatPopup(loc); + + markers[id].bindPopup(description.htmldesc).openPopup() + map.fitBounds(markerLayer.getBounds()); + + } + + + + markerLayer = new L.FeatureGroup(); + map.addLayer(markerLayer); + + ws_go(osm_map_marker); // Connect to websocket and start listening + +} + +function formatPopup(loc) { + var htmldesc=""; + var shortdesc=""; + var s = loc.topic.split('/'); + var username = (s[0]) ? s[1] : s[2]; /* cater for leading / in topic */ + var device = (s[0]) ? s[2] : s[3]; /* cater for leading / in topic */ + + var dt = moment.utc(loc.tst * 1000).local(); + + var userdev = username + "/" + device; + userdev = renames[userdev] ? renames[userdev] : userdev; + userdev = loc.name ? loc.name : userdev; + + var data = { + userdev: userdev, + ghash: loc.ghash ? loc.ghash : 'unknown', + addr: loc.addr, + lat: loc.lat, + lon: loc.lon, + fulldate: dt.format("DD MMM YYYY HH:mm:ss"), + facedata: loc.face, + vel: loc.vel, + cog: loc.cog, + }; + + + if (loc.face) { + htmldesc = htmldesc + "