diff --git a/src/rf_mapper/web/static/css/style.css b/src/rf_mapper/web/static/css/style.css index 2f80252..5acbdff 100644 --- a/src/rf_mapper/web/static/css/style.css +++ b/src/rf_mapper/web/static/css/style.css @@ -961,6 +961,19 @@ body { z-index: 100; } +.marker-3d.peer-scanner .marker-icon { + background: #00c8ff; + box-shadow: 0 0 15px rgba(0, 200, 255, 0.6), 0 2px 6px rgba(0, 0, 0, 0.4); + border: 2px solid #ffffff; + width: 22px; + height: 22px; + z-index: 90; +} + +.marker-3d.peer-scanner .marker-floor { + background: rgba(0, 200, 255, 0.9); +} + /* Floor Controls */ .floor-section { display: block; diff --git a/src/rf_mapper/web/static/js/app.js b/src/rf_mapper/web/static/js/app.js index 0a17b2d..7264220 100644 --- a/src/rf_mapper/web/static/js/app.js +++ b/src/rf_mapper/web/static/js/app.js @@ -1445,6 +1445,41 @@ function update3DMarkers() { scannerMarker._deviceId = '__scanner__'; map3dMarkers.push(scannerMarker); + // Add peer scanner markers (absolute positions) + fetch('/api/peers') + .then(r => r.json()) + .then(data => { + (data.peers || []).forEach(peer => { + if (peer.latitude && peer.longitude) { + const peerFloor = peer.floor ?? 0; + const peerOffset = (peerFloor - groundFloor) * pixelsPerFloor; + + const peerEl = document.createElement('div'); + peerEl.className = 'marker-3d peer-scanner'; + peerEl.innerHTML = `