fix: run map.invalidateSize before marker decollision on every render

On SPA navigation, the map container may not have its final dimensions
when markers render, causing latLngToLayerPoint to return incorrect
pixel coordinates for decollision. This resulted in overlapping markers
that only resolved on a full page refresh.

Fix: call map.invalidateSize() at the start of every renderMarkers()
call, ensuring correct container dimensions before deconfliction runs.
This commit is contained in:
you
2026-03-24 20:24:26 +00:00
parent 383219b4cf
commit 305da30b88
2 changed files with 29 additions and 25 deletions

View File

@@ -22,9 +22,9 @@
<meta name="twitter:title" content="MeshCore Analyzer">
<meta name="twitter:description" content="Real-time MeshCore LoRa mesh network analyzer — live packet visualization, node tracking, channel decryption, and route analysis.">
<meta name="twitter:image" content="https://raw.githubusercontent.com/Kpa-clawbot/meshcore-analyzer/master/public/og-image.png">
<link rel="stylesheet" href="style.css?v=1774383461">
<link rel="stylesheet" href="home.css?v=1774383461">
<link rel="stylesheet" href="live.css?v=1774383461">
<link rel="stylesheet" href="style.css?v=1774383787">
<link rel="stylesheet" href="home.css?v=1774383787">
<link rel="stylesheet" href="live.css?v=1774383787">
<link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css"
integrity="sha256-p4NxAoJBhIIN+hmNHrzRCf9tD/miZyoHS5obTRR9BMY="
crossorigin="anonymous">
@@ -81,27 +81,27 @@
<main id="app" role="main"></main>
<script src="vendor/qrcode.js"></script>
<script src="roles.js?v=1774383461"></script>
<script src="customize.js?v=1774383461" onerror="console.error('Failed to load:', this.src)"></script>
<script src="region-filter.js?v=1774383461"></script>
<script src="hop-resolver.js?v=1774383461"></script>
<script src="hop-display.js?v=1774383461"></script>
<script src="app.js?v=1774383461"></script>
<script src="home.js?v=1774383461"></script>
<script src="packet-filter.js?v=1774383461"></script>
<script src="packets.js?v=1774383461"></script>
<script src="map.js?v=1774383461" onerror="console.error('Failed to load:', this.src)"></script>
<script src="channels.js?v=1774383461" onerror="console.error('Failed to load:', this.src)"></script>
<script src="nodes.js?v=1774383461" onerror="console.error('Failed to load:', this.src)"></script>
<script src="traces.js?v=1774383461" onerror="console.error('Failed to load:', this.src)"></script>
<script src="analytics.js?v=1774383461" onerror="console.error('Failed to load:', this.src)"></script>
<script src="audio.js?v=1774383461" onerror="console.error('Failed to load:', this.src)"></script>
<script src="audio-v1-constellation.js?v=1774383461" onerror="console.error('Failed to load:', this.src)"></script>
<script src="audio-lab.js?v=1774383461" onerror="console.error('Failed to load:', this.src)"></script>
<script src="live.js?v=1774383461" onerror="console.error('Failed to load:', this.src)"></script>
<script src="observers.js?v=1774383461" onerror="console.error('Failed to load:', this.src)"></script>
<script src="observer-detail.js?v=1774383461" onerror="console.error('Failed to load:', this.src)"></script>
<script src="node-analytics.js?v=1774383461" onerror="console.error('Failed to load:', this.src)"></script>
<script src="perf.js?v=1774383461" onerror="console.error('Failed to load:', this.src)"></script>
<script src="roles.js?v=1774383787"></script>
<script src="customize.js?v=1774383787" onerror="console.error('Failed to load:', this.src)"></script>
<script src="region-filter.js?v=1774383787"></script>
<script src="hop-resolver.js?v=1774383787"></script>
<script src="hop-display.js?v=1774383787"></script>
<script src="app.js?v=1774383787"></script>
<script src="home.js?v=1774383787"></script>
<script src="packet-filter.js?v=1774383787"></script>
<script src="packets.js?v=1774383787"></script>
<script src="map.js?v=1774383787" onerror="console.error('Failed to load:', this.src)"></script>
<script src="channels.js?v=1774383787" onerror="console.error('Failed to load:', this.src)"></script>
<script src="nodes.js?v=1774383787" onerror="console.error('Failed to load:', this.src)"></script>
<script src="traces.js?v=1774383787" onerror="console.error('Failed to load:', this.src)"></script>
<script src="analytics.js?v=1774383787" onerror="console.error('Failed to load:', this.src)"></script>
<script src="audio.js?v=1774383787" onerror="console.error('Failed to load:', this.src)"></script>
<script src="audio-v1-constellation.js?v=1774383787" onerror="console.error('Failed to load:', this.src)"></script>
<script src="audio-lab.js?v=1774383787" onerror="console.error('Failed to load:', this.src)"></script>
<script src="live.js?v=1774383787" onerror="console.error('Failed to load:', this.src)"></script>
<script src="observers.js?v=1774383787" onerror="console.error('Failed to load:', this.src)"></script>
<script src="observer-detail.js?v=1774383787" onerror="console.error('Failed to load:', this.src)"></script>
<script src="node-analytics.js?v=1774383787" onerror="console.error('Failed to load:', this.src)"></script>
<script src="perf.js?v=1774383787" onerror="console.error('Failed to load:', this.src)"></script>
</body>
</html>

View File

@@ -619,6 +619,10 @@
}
}
// Ensure map has correct pixel dimensions before deconfliction
// (SPA navigation may render markers before container is fully sized)
map.invalidateSize({ animate: false });
// Deconflict ALL markers
if (allMarkers.length > 0) {
deconflictLabels(allMarkers, map);