diff --git a/client/src/pages/MapView.jsx b/client/src/pages/MapView.jsx
index a0f0819..c4ad9b5 100644
--- a/client/src/pages/MapView.jsx
+++ b/client/src/pages/MapView.jsx
@@ -303,38 +303,65 @@ const MapView = () => {
);
})}
- {/* Drone Detection Markers */}
+ {/* RSSI-based Detection Rings around Detectors */}
{showDroneDetections && droneDetectionHistory
.filter(detection => detection.geo_lat && detection.geo_lon)
.map(detection => {
const opacity = getDetectionOpacity(detection);
const age = getDetectionAge(detection);
+ // Calculate ring radius based on RSSI (rough distance estimation)
+ const getRssiRadius = (rssi) => {
+ if (rssi > -40) return 100; // <100m - very close
+ if (rssi > -60) return 500; // ~500m - close
+ if (rssi > -70) return 1500; // ~1.5km - medium
+ if (rssi > -80) return 4000; // ~4km - far
+ if (rssi > -90) return 8000; // ~8km - very far
+ return 15000; // ~15km - maximum range
+ };
+
+ const radius = getRssiRadius(detection.rssi);
+
+ // Color based on threat level and RSSI strength
+ const getRingColor = (rssi, droneType) => {
+ // Orlan drones (type 1) always red
+ if (droneType === 1) return '#dc2626'; // red-600
+
+ // Other drones based on RSSI
+ if (rssi > -60) return '#dc2626'; // red-600 - close
+ if (rssi > -70) return '#ea580c'; // orange-600 - medium
+ return '#16a34a'; // green-600 - far
+ };
+
+ const ringColor = getRingColor(detection.rssi, detection.drone_type);
+
return (