Add backbone layers

This commit is contained in:
Anton Roslund 2025-06-27 11:15:52 +02:00
parent e30fb12aa8
commit d95af37be5
3 changed files with 50 additions and 0 deletions

View file

@ -0,0 +1,2 @@
-- AlterTable
ALTER TABLE `nodes` ADD COLUMN `is_backbone` BOOLEAN NULL;

View file

@ -52,6 +52,7 @@ model Node {
mqtt_connection_state_updated_at DateTime? mqtt_connection_state_updated_at DateTime?
ok_to_mqtt Boolean? ok_to_mqtt Boolean?
is_backbone Boolean?
created_at DateTime @default(now()) created_at DateTime @default(now())
updated_at DateTime @default(now()) @updatedAt updated_at DateTime @default(now()) @updatedAt

View file

@ -2656,6 +2656,7 @@
// create layer groups // create layer groups
var nodesLayerGroup = new L.LayerGroup(); var nodesLayerGroup = new L.LayerGroup();
var neighboursLayerGroup = new L.LayerGroup(); var neighboursLayerGroup = new L.LayerGroup();
var backboneNeighboursLayerGroup = new L.LayerGroup();
var nodeNeighboursLayerGroup = new L.LayerGroup(); var nodeNeighboursLayerGroup = new L.LayerGroup();
var nodesClusteredLayerGroup = L.markerClusterGroup({ var nodesClusteredLayerGroup = L.markerClusterGroup({
showCoverageOnHover: false, showCoverageOnHover: false,
@ -2665,6 +2666,7 @@
showCoverageOnHover: false, showCoverageOnHover: false,
disableClusteringAtZoom: 10, // zoom level where node clustering is disabled disableClusteringAtZoom: 10, // zoom level where node clustering is disabled
}); });
var nodesBackboneLayerGroup = new L.LayerGroup();
var waypointsLayerGroup = new L.LayerGroup(); var waypointsLayerGroup = new L.LayerGroup();
var nodePositionHistoryLayerGroup = new L.LayerGroup(); var nodePositionHistoryLayerGroup = new L.LayerGroup();
@ -2724,12 +2726,14 @@
"Nodes": { "Nodes": {
"All": nodesLayerGroup, "All": nodesLayerGroup,
"Routers": nodesRouterLayerGroup, "Routers": nodesRouterLayerGroup,
"Backbone": nodesBackboneLayerGroup,
"Clustered": nodesClusteredLayerGroup, "Clustered": nodesClusteredLayerGroup,
"None": new L.LayerGroup(), "None": new L.LayerGroup(),
}, },
"Overlays": { "Overlays": {
"Legend": legendLayerGroup, "Legend": legendLayerGroup,
"Neighbours": neighboursLayerGroup, "Neighbours": neighboursLayerGroup,
"Backbone Connection": backboneNeighboursLayerGroup,
"Waypoints": waypointsLayerGroup, "Waypoints": waypointsLayerGroup,
"Position History": nodePositionHistoryLayerGroup, "Position History": nodePositionHistoryLayerGroup,
}, },
@ -2749,6 +2753,9 @@
if(enabledOverlayLayers.includes("Neighbours")){ if(enabledOverlayLayers.includes("Neighbours")){
neighboursLayerGroup.addTo(map); neighboursLayerGroup.addTo(map);
} }
if(enabledOverlayLayers.includes("Backbone Connection")){
backboneNeighboursLayerGroup.addTo(map);
}
if(enabledOverlayLayers.includes("Waypoints")){ if(enabledOverlayLayers.includes("Waypoints")){
waypointsLayerGroup.addTo(map); waypointsLayerGroup.addTo(map);
} }
@ -2894,10 +2901,12 @@
nodesLayerGroup.clearLayers(); nodesLayerGroup.clearLayers();
nodesClusteredLayerGroup.clearLayers(); nodesClusteredLayerGroup.clearLayers();
nodesRouterLayerGroup.clearLayers(); nodesRouterLayerGroup.clearLayers();
nodesBackboneLayerGroup.clearLayers();
} }
function clearAllNeighbours() { function clearAllNeighbours() {
neighboursLayerGroup.clearLayers(); neighboursLayerGroup.clearLayers();
backboneNeighboursLayerGroup.clearLayers();
} }
function clearAllWaypoints() { function clearAllWaypoints() {
@ -3369,6 +3378,11 @@
nodesRouterLayerGroup.addLayer(marker); nodesRouterLayerGroup.addLayer(marker);
} }
// add markers for backbone to layer group
if(node.is_backbone) {
nodesBackboneLayerGroup.addLayer(marker);
}
// show tooltip on desktop only // show tooltip on desktop only
if(!isMobile()){ if(!isMobile()){
marker.bindTooltip(getTooltipContentForNode(node), { marker.bindTooltip(getTooltipContentForNode(node), {
@ -3453,6 +3467,28 @@
offset: symmetrical ? 3 : 0, offset: symmetrical ? 3 : 0,
}).addTo(neighboursLayerGroup); }).addTo(neighboursLayerGroup);
// additional line for backbone neighbours
const backboneNeighbourLine = L.polyline([
currentNode.getLatLng(),
neighbourNodeMarker.getLatLng(),
], {
color: getColourForSnr(neighbour.snr),
opacity: 0.75,
offset: symmetrical ? 3 : 0,
}).arrowheads({
size: '10px',
fill: true,
offsets: {
start: '25px',
end: '25px',
},
})
// If both nodes are backbone nodes add to layer group
if(node.is_backbone && updatedNodes.find(n => n.node_id == neighbour.node_id)?.is_backbone) {
backboneNeighbourLine.addTo(backboneNeighboursLayerGroup);
}
// default to showing distance in meters // default to showing distance in meters
var distance = `${distanceInMeters} meters`; var distance = `${distanceInMeters} meters`;
@ -3482,6 +3518,17 @@
event.target.closeTooltip(); event.target.closeTooltip();
}); });
backboneNeighbourLine.bindTooltip(tooltip, {
sticky: true,
opacity: 1,
interactive: true,
})
.bindPopup(tooltip)
.on('click', function(event) {
// close tooltip on click to prevent tooltip and popup showing at same time
event.target.closeTooltip();
});
} }
} }