From 0fcdcf0e8a06438e000acf18e4882da3cffe8919 Mon Sep 17 00:00:00 2001 From: "Stanislav Lechev [0xAF]" Date: Mon, 7 Aug 2023 03:42:38 +0300 Subject: [PATCH] add Leaflet with OSM and other maps --- htdocs/gfx/icon-KiwiSDR.png | Bin 0 -> 21703 bytes htdocs/gfx/icon-OpenWebRX.png | Bin 0 -> 11679 bytes htdocs/gfx/icon-Stations.png | Bin 0 -> 30852 bytes htdocs/gfx/icon-WebSDR.png | Bin 0 -> 24908 bytes htdocs/lib/Leaflet.js | 104 ++++++++++++ htdocs/lib/MapManager.js | 4 +- htdocs/lib/MapMarkers.js | 22 ++- htdocs/map.html | 5 +- htdocs/map.js | 18 +- htdocs/mapLeaflet.js | 312 ++++++++++++++++++++++++++++++++++ owrx/controllers/assets.py | 10 ++ 11 files changed, 455 insertions(+), 20 deletions(-) create mode 100644 htdocs/gfx/icon-KiwiSDR.png create mode 100644 htdocs/gfx/icon-OpenWebRX.png create mode 100644 htdocs/gfx/icon-Stations.png create mode 100644 htdocs/gfx/icon-WebSDR.png create mode 100644 htdocs/lib/Leaflet.js create mode 100644 htdocs/mapLeaflet.js diff --git a/htdocs/gfx/icon-KiwiSDR.png b/htdocs/gfx/icon-KiwiSDR.png new file mode 100644 index 0000000000000000000000000000000000000000..c3fcaaa944505d892811dd20325c275fac2271ed GIT binary patch literal 21703 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%0AEn}w0%BxE{eW$C+UuZ@EnYRZry%%Gs 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∓XXtR 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 Kbd{t@$o~LEIQ1p~ literal 0 HcmV?d00001 diff --git a/htdocs/gfx/icon-WebSDR.png b/htdocs/gfx/icon-WebSDR.png new file mode 100644 index 0000000000000000000000000000000000000000..783cc0ac01b3a96be1b69124dde927fa4b42bf8a GIT binary patch literal 24908 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 - + + ${header} -
+

Colors

diff --git a/htdocs/map.js b/htdocs/map.js index decdf829..f91bae07 100644 --- a/htdocs/map.js +++ b/htdocs/map.js @@ -149,7 +149,7 @@ MapManager.prototype.initializeMap = function(receiver_gps, api_key) { MapManager.prototype.processUpdates = function(updates) { var self = this; - if (typeof(GMarker) == 'undefined') { + if (typeof(GMarker) === 'undefined') { updateQueue = updateQueue.concat(updates); return; } @@ -174,7 +174,7 @@ MapManager.prototype.processUpdates = function(updates) { self.mman.addType(update.mode); self.mman.add(update.callsign, marker); marker.addListener('click', function() { - showMarkerInfoWindow(update.callsign, marker.pos); + showMarkerInfoWindow(update.callsign, marker.position); }); } @@ -188,13 +188,13 @@ MapManager.prototype.processUpdates = function(updates) { marker.setMarkerOptions(aprsOptions); if (expectedCallsign && expectedCallsign == update.callsign) { - map.panTo(marker.pos); - showMarkerInfoWindow(update.callsign, marker.pos); + map.panTo(marker.position); + showMarkerInfoWindow(update.callsign, marker.position); expectedCallsign = false; } if (infoWindow && infoWindow.callsign && infoWindow.callsign == update.callsign) { - showMarkerInfoWindow(infoWindow.callsign, marker.pos); + showMarkerInfoWindow(infoWindow.callsign, marker.position); } break; @@ -220,7 +220,7 @@ MapManager.prototype.processUpdates = function(updates) { self.mman.addType(update.mode); self.mman.add(update.callsign, marker); marker.addListener('click', function() { - showMarkerInfoWindow(update.callsign, marker.pos); + showMarkerInfoWindow(update.callsign, marker.position); }); } @@ -234,13 +234,13 @@ MapManager.prototype.processUpdates = function(updates) { marker.setMarkerOptions(options); if (expectedCallsign && expectedCallsign == update.callsign) { - map.panTo(marker.pos); - showMarkerInfoWindow(update.callsign, marker.pos); + map.panTo(marker.position); + showMarkerInfoWindow(update.callsign, marker.position); expectedCallsign = false; } if (infoWindow && infoWindow.callsign && infoWindow.callsign == update.callsign) { - showMarkerInfoWindow(infoWindow.callsign, marker.pos); + showMarkerInfoWindow(infoWindow.callsign, marker.position); } break; diff --git a/htdocs/mapLeaflet.js b/htdocs/mapLeaflet.js new file mode 100644 index 00000000..fe363e58 --- /dev/null +++ b/htdocs/mapLeaflet.js @@ -0,0 +1,312 @@ +// Marker.linkify() uses these URLs +var callsign_url = null; +var vessel_url = null; +var flight_url = null; + +// reasonable default; will be overriden by server +var retention_time = 2 * 60 * 60 * 1000; + +// Our Leaflet Map and layerControl +var map = null; +var layerControl; + +// Receiver location marker +var receiverMarker = null; + +// Updates are queued here +var updateQueue = []; + +// Web socket connection management, message processing +var mapManager = new MapManager(); + +// icons cache +var icons = {}; + +var query = window.location.search.replace(/^\?/, '').split('&').map(function(v){ + var s = v.split('='); + var r = {}; + r[s[0]] = s.slice(1).join('='); + return r; +}).reduce(function(a, b){ + return a.assign(b); +}); + +var expectedCallsign = query.callsign? decodeURIComponent(query.callsign) : null; +var expectedLocator = query.locator? query.locator : null; + +// https://stackoverflow.com/a/46981806/420585 +function fetchStyleSheet(url, media = 'screen') { + let $dfd = $.Deferred(), + finish = () => $dfd.resolve(), + $link = $(document.createElement('link')).attr({ + media, + type: 'text/css', + rel: 'stylesheet' + }) + .on('load', 'error', finish) + .appendTo('head'), + $img = $(document.createElement('img')) + .on('error', finish); // Support browsers that don't fire events on link elements + $link[0].href = $img[0].src = url; + return $dfd.promise(); +} + + + +// Show information bubble for a locator +function showLocatorInfoWindow(locator, pos) { + var p = new posObj(pos); + + L.popup(pos, { + content: mapManager.lman.getInfoHTML(locator, p, receiverMarker) + }).openOn(map); +}; + +// Show information bubble for a marker +function showMarkerInfoWindow(name, pos) { + var marker = mapManager.mman.find(name); + L.popup(pos, { content: marker.getInfoHTML(name, receiverMarker) }).openOn(map); +}; + +// +// Leaflet-SPECIFIC MAP MANAGER METHODS +// + +MapManager.prototype.setReceiverName = function(name) { + if (receiverMarker) receiverMarker.setTitle(name); +} + +MapManager.prototype.removeReceiver = function() { + if (receiverMarker) receiverMarker.setMap(); +} + +MapManager.prototype.initializeMap = function(receiver_gps, api_key) { + var receiverPos = [ receiver_gps.lat, receiver_gps.lon ]; + + if (map) { + receiverMarker.setLatLng(receiverPos); + receiverMarker.setMarkerOptions(this.config); + receiverMarker.setMap(map); + } else { + var self = this; + + // load Leaflet CSS first + fetchStyleSheet('https://unpkg.com/leaflet@1.9.4/dist/leaflet.css').done(function () { + // now load Leaflet JS + $.getScript('https://unpkg.com/leaflet@1.9.4/dist/leaflet.js').done(function () { + // create map + map = L.map('openwebrx-map').setView(receiverPos, 5); + baseLayer = L.tileLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png', { + maxZoom: 19, + noWrap: true, + attribution: '© OpenStreetMap' + }).addTo(map); + // add night overlay + $.getScript('https://unpkg.com/@joergdietrich/leaflet.terminator@1.0.0/L.Terminator.js').done(function () { + var pane = map.createPane('nite'); + pane.style.zIndex = 201; + pane.style.pointerEvents = 'none !important'; + pane.style.cursor = 'grab !important'; + var t = L.terminator({ fillOpacity: 0.2, interactive: false, pane }); + t.addTo(map); + setInterval(function () { t.setTime(); }, 10000); // refresh every 10 secs + }); + + // create layerControl and add more maps + if (!layerControl) { + var OpenTopoMap = L.tileLayer('https://{s}.tile.opentopomap.org/{z}/{x}/{y}.png', { + maxZoom: 17, + noWrap: true, + attribution: 'Map data: © OpenStreetMap contributors, SRTM | Map style: © OpenTopoMap (CC-BY-SA)' + }); + var Stadia_AlidadeSmooth = L.tileLayer('https://tiles.stadiamaps.com/tiles/alidade_smooth/{z}/{x}/{y}{r}.png', { + maxZoom: 20, + noWrap: true, + attribution: '© Stadia Maps, © OpenMapTiles © OpenStreetMap contributors', + }); + var Esri_WorldTopoMap = L.tileLayer('https://server.arcgisonline.com/ArcGIS/rest/services/World_Topo_Map/MapServer/tile/{z}/{y}/{x}', { + noWrap: true, + attribution: 'Tiles © Esri — Esri, DeLorme, NAVTEQ, TomTom, Intermap, iPC, USGS, FAO, NPS, NRCAN, GeoBase, Kadaster NL, Ordnance Survey, Esri Japan, METI, Esri China (Hong Kong), and the GIS User Community' + }); + var Stadia_AlidadeSmoothDark = L.tileLayer('https://tiles.stadiamaps.com/tiles/alidade_smooth_dark/{z}/{x}/{y}{r}.png', { + maxZoom: 20, + noWrap: true, + attribution: '© Stadia Maps, © OpenMapTiles © OpenStreetMap contributors' + }); + + // used to open or collaps the layerControl by default + function isMobile () { + try { document.createEvent("TouchEvent"); return true; } + catch (e) { return false; } + } + + layerControl = L.control.layers({ + 'OSM': baseLayer, + 'StadiaAlidade': Stadia_AlidadeSmooth, + 'StadiaAlidadeDark': Stadia_AlidadeSmoothDark, + 'EsriWorldTopo': Esri_WorldTopoMap, + 'OpenTopoMap': OpenTopoMap, + }, null, { + collapsed: isMobile(), hideSingleBase: true, position: 'bottomleft' + } + ).addTo(map); + + // move legend div to our layerControl + $('
').insertAfter(layerControl._overlaysList); + layerControl.legend = $('.openwebrx-map-legend').insertAfter($('#openwebrx-map-legend-separator')); + } // layerControl + + // Load and initialize OWRX-specific map item managers + $.getScript('static/lib/Leaflet.js').done(function() { + // Process any accumulated updates + self.processUpdates(updateQueue); + updateQueue = []; + + if (!receiverMarker) { + receiverMarker = new LMarker(); + receiverMarker.setMarkerPosition(self.config['receiver_name'], receiverPos[0], receiverPos[1]); + receiverMarker.addListener('click', function () { + L.popup(receiverMarker.getPos(), { + content: '

' + self.config['receiver_name'] + '

' + + '
Receiver location
' + }).openOn(map); + }); + receiverMarker.setMarkerOptions(this.config); + receiverMarker.setMap(map); + } + }); + + // Create map legend selectors + self.setupLegendFilters(layerControl.legend); + + }); // leaflet.js + }); // leaflet.css + } +}; + +MapManager.prototype.processUpdates = function(updates) { + var self = this; + + if (typeof(LMarker) === 'undefined') { + updateQueue = updateQueue.concat(updates); + return; + } + + updates.forEach(function(update) { + switch (update.location.type) { + case 'latlon': + var marker = self.mman.find(update.callsign); + var markerClass = LMarker; + var aprsOptions = {} + + if (update.location.symbol) { + markerClass = LAprsMarker; + aprsOptions.symbol = update.location.symbol; + aprsOptions.course = update.location.course; + aprsOptions.speed = update.location.speed; + } + + // If new item, create a new marker for it + if (!marker) { + marker = new markerClass(); + self.mman.addType(update.mode); + self.mman.add(update.callsign, marker); + marker.addListener('click', function() { + showMarkerInfoWindow(update.callsign, marker.getPos()); + }); + marker.div = marker.create(); + marker.setIcon(L.divIcon({ html: marker.div, className: 'dummy' })); + } + + // Update marker attributes and age + marker.update(update); + // Assign marker to map + marker.setMap(self.mman.isEnabled(update.mode)? map : undefined); + + // Apply marker options + marker.setMarkerOptions(aprsOptions); + + if (expectedCallsign && expectedCallsign == update.callsign) { + map.setView(marker.getPos()); + showMarkerInfoWindow(update.callsign, marker.getPos()); + expectedCallsign = false; + } + break; + + case 'feature': + var marker = self.mman.find(update.callsign); + var options = {}; + + // If no symbol or color supplied, use defaults by type + if (update.location.symbol) { + options.symbol = update.location.symbol; + } else { + options.symbol = self.mman.getSymbol(update.mode); + } + if (update.location.color) { + options.color = update.location.color; + } else { + options.color = self.mman.getColor(update.mode); + } + + // If new item, create a new marker for it + if (!marker) { + marker = new LFeatureMarker(); + if (!icons[update.mode]) { + icons[update.mode] = L.icon({ + iconUrl: 'static/gfx/icon-' + update.mode + '.png', + iconSize: [24, 24], + }); + } + marker.setIcon(icons[update.mode]); + self.mman.addType(update.mode); + self.mman.add(update.callsign, marker); + marker.addListener('click', function() { + showMarkerInfoWindow(update.callsign, marker.getPos()); + }); + } + + // Update marker attributes and age + marker.update(update); + + // Assign marker to map + marker.setMap(self.mman.isEnabled(update.mode)? map : undefined); + + // Apply marker options + marker.setMarkerOptions(options); + + if (expectedCallsign && expectedCallsign == update.callsign) { + map.setView(marker.getPos()); + showMarkerInfoWindow(update.callsign, marker.getPos()); + expectedCallsign = false; + } + break; + + case 'locator': + var rectangle = self.lman.find(update.callsign); + + // If new item, create a new locator for it + if (!rectangle) { + rectangle = new LLocator(); + self.lman.add(update.callsign, rectangle); + rectangle.addListener('click', function() { + showLocatorInfoWindow(rectangle.locator, rectangle.center); + }); + } + + // Update locator attributes, center, age + rectangle.update(update); + + // Assign locator to map and set its color + rectangle.setMap(self.lman.filter(rectangle)? map : undefined); + rectangle.setColor(self.lman.getColor(rectangle)); + + if (expectedLocator && expectedLocator == update.location.locator) { + map.setView(rectangle.center); + showLocatorInfoWindow(expectedLocator, rectangle.center); + expectedLocator = false; + } + break; + } + }); +}; diff --git a/owrx/controllers/assets.py b/owrx/controllers/assets.py index 52755acd..7cb50214 100644 --- a/owrx/controllers/assets.py +++ b/owrx/controllers/assets.py @@ -151,6 +151,16 @@ class CompiledAssetsController(GzipMixin, ModificationAwareController): "lib/Clock.js", "map.js", ], + "mapLeaflet.js": [ + "lib/jquery-3.2.1.min.js", + "lib/chroma.min.js", + "lib/Header.js", + "lib/MapLocators.js", + "lib/MapMarkers.js", + "lib/MapManager.js", + "lib/Clock.js", + "mapLeaflet.js", + ], "settings.js": [ "lib/jquery-3.2.1.min.js", "lib/bootstrap.bundle.min.js",