mirror of
https://github.com/Roslund/meshtastic-map.git
synced 2026-08-06 08:53:22 +02:00
New Jitter logic for inprecise positions.
This commit is contained in:
+15
-6
@@ -3561,14 +3561,23 @@
|
||||
//}
|
||||
|
||||
// To not have overlapping nodes.
|
||||
// Should probbably check if there is allready an other node in the same position before applying jitter.
|
||||
var jitter = 0
|
||||
if (node.position_precision != 32) {
|
||||
jitter = 0.0005 * (Math.random() - 0.5);
|
||||
}
|
||||
var latJitter = 0;
|
||||
var lonJitter = 0;
|
||||
// If position pression > 45m apply random jitter within a small circle to avoid diagonal-only displacement
|
||||
if (node.position_precision < 19) {
|
||||
const maxMeters = 40;
|
||||
const r = maxMeters * Math.sqrt(Math.random());
|
||||
const theta = 2 * Math.PI * Math.random();
|
||||
const dy = r * Math.sin(theta);
|
||||
const dx = r * Math.cos(theta);
|
||||
const metersPerDegLat = 111320;
|
||||
const metersPerDegLon = 111320 * Math.cos(node.latitude * Math.PI / 180);
|
||||
latJitter = dy / metersPerDegLat;
|
||||
lonJitter = metersPerDegLon ? (dx / metersPerDegLon) : 0;
|
||||
}
|
||||
|
||||
// create node marker
|
||||
const marker = L.marker([node.latitude + jitter, longitude + jitter], {
|
||||
const marker = L.marker([node.latitude + latJitter, longitude + lonJitter], {
|
||||
icon: icon,
|
||||
tagName: node.node_id,
|
||||
// zIndex: offline (-2000) < has channel_id (-1000) < others (1000)
|
||||
|
||||
Reference in New Issue
Block a user