function initBaseLayers(map) { var baseMap = L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { attribution: '© OpenStreetMap', maxZoom: 19 }); var baseSat = L.tileLayer('https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}', { attribution: '© Esri', maxZoom: 19 }); baseMap.addTo(map); document.getElementById('base-map').addEventListener('click', function() { if (map.hasLayer(baseSat)) map.removeLayer(baseSat); if (!map.hasLayer(baseMap)) baseMap.addTo(map); this.classList.add('active'); document.getElementById('base-sat').classList.remove('active'); }); document.getElementById('base-sat').addEventListener('click', function() { if (map.hasLayer(baseMap)) map.removeLayer(baseMap); if (!map.hasLayer(baseSat)) baseSat.addTo(map); this.classList.add('active'); document.getElementById('base-map').classList.remove('active'); }); } function makeSpbuIcon(color, size) { size = size || 18; var h = size / 2; return L.divIcon({ className: '', html: '
', iconSize: [size, size], iconAnchor: [h, h], popupAnchor: [0, -12] }); } function showToast(msg) { var el = document.getElementById('toast'); if (!el) return; el.textContent = msg; el.classList.add('show'); setTimeout(function() { el.classList.remove('show'); }, 3000); }