diff --git a/src/pages/tasking/main.js b/src/pages/tasking/main.js index bd76d098..8a350e3c 100644 --- a/src/pages/tasking/main.js +++ b/src/pages/tasking/main.js @@ -90,6 +90,7 @@ import { registerBOMFloodWarningBoundariesLayer, registerBOMFireWeatherDistrictsLayer } from "./mapLayers/weather.js"; +import { registerNswMeshNodesLayer } from "./mapLayers/civilian.js" import { fetchHqDetailsSummary } from './utils/hqSummary.js'; @@ -2971,6 +2972,7 @@ function VM() { registerBOMFloodWarningBoundariesLayer(self, sourceUrl); registerBOMFireWeatherDistrictsLayer(self, sourceUrl); registerRainRadarLayer(self, map); + registerNswMeshNodesLayer(self) // --- Layers Drawer (under zoom) const LayersDrawer = L.Control.extend({ diff --git a/src/pages/tasking/mapLayers/civilian.js b/src/pages/tasking/mapLayers/civilian.js new file mode 100644 index 00000000..bc1a4323 --- /dev/null +++ b/src/pages/tasking/mapLayers/civilian.js @@ -0,0 +1,46 @@ +import L from "leaflet"; + + + +export function registerNswMeshNodesLayer(vm) { + vm.mapVM.registerPollingLayer("nswMeshNodes", { + label: "NSW Mesh Nodes", + menuGroup: "Civilian", + visibleByDefault: localStorage.getItem(`ov.nswMeshNodes`) || false, + fetchFn: async () => { + const response = await fetch("https://corescope.nswmesh.au/api/nodes?limit=10000&lastHeard=30d") + if (!response.ok) { throw new Error(`Failed to get MeshCore nodes: ${response.status}`); } + const result = await response.json(); + return result; + }, + drawFn: (layerGroup, data) => { + + if (!data || !Array.isArray(data.nodes)) return; + + + data.nodes.forEach((f) => { + if (!Number.isFinite(f.lat) || !Number.isFinite(f.lon)) return; + + const roleToIconMap = { + repeater : "🛜", + companion : "📟", + observer : "🖥️" + } + + const roleRmoji = roleToIconMap[f.role] ?? "📻" + + const marker = L.marker([f.lat, f.lon], { + icon: L.divIcon({ + html: roleRmoji, + iconSize: [0, 0] + })}); + layerGroup.addLayer(marker); + }); + + + + return; + + }, + }); +} \ No newline at end of file diff --git a/static/manifest.json b/static/manifest.json index 198e9076..d2c30235 100644 --- a/static/manifest.json +++ b/static/manifest.json @@ -40,7 +40,8 @@ "https://nula.waternsw.com.au/*", "https://services1.arcgis.com/*", "https://api.rainviewer.com/*", - "https://portal.spatial.nsw.gov.au/*" + "https://portal.spatial.nsw.gov.au/*", + "https://corescope.nswmesh.au/*" ], "permissions": [ "storage",