/* ═══════════════════════════════════════════════════════════ 13. MAP RENDER ═══════════════════════════════════════════════════════════ */ function renderMap(){ const db=Store.allDb(); // SPBU App._groups.spbu.clearLayers(); db.spbu.forEach(r=>{ const m=L.circleMarker([r.lat,r.lng],{radius:9,fillColor:CFG.spbu.color(r),color:'#fff',weight:2,fillOpacity:1}); m.bindPopup(Popup.spbu(r),{maxWidth:320}); m.on('click',()=>highlightCard(r.id)); App._groups.spbu.addLayer(m); }); // Warga App._groups.warga.clearLayers(); db.warga.forEach(r=>{ const clr=CFG.warga.color(r); // Check if in any RI radius const inRadius=db.rumahIbadah.some(hub=>{ if(!hub.lat) return false; const d=L.latLng(r.lat,r.lng).distanceTo(L.latLng(hub.lat,hub.lng)); return d<=(parseFloat(hub.radius)||300); }); const iconHtml=`
👨‍👩‍👧
${inRadius?'':'
'}`; const icon=L.divIcon({html:`
${iconHtml}
`,className:'',iconSize:[22,22],iconAnchor:[11,11]}); const m=L.marker([r.lat,r.lng],{icon}); m.bindPopup(Popup.warga(r),{maxWidth:360}); m.on('click',()=>highlightCard(r.id)); App._groups.warga.addLayer(m); }); // Rumah Ibadah App._groups.rumahIbadah.clearLayers(); db.rumahIbadah.forEach(r=>{ const clr=CFG.rumahIbadah.color(r); const m=L.circleMarker([r.lat,r.lng],{radius:10,fillColor:clr,color:'#fff',weight:2.5,fillOpacity:1}); m.bindPopup(Popup.rumahIbadah(r),{maxWidth:320}); m.on('click',()=>highlightCard(r.id)); App._groups.rumahIbadah.addLayer(m); // Always draw radius 300m coverage circle const radiusM=parseFloat(r.radius)||300; const ring=L.circle([r.lat,r.lng],{radius:radiusM,color:clr,weight:1.5,fillColor:clr,fillOpacity:.06,dashArray:'6 4'}); App._groups.rumahIbadah.addLayer(ring); }); // Jalan App._groups.jalan.clearLayers(); db.jalan.forEach(r=>{ const l=L.polyline(r.coords,{color:CFG.jalan.color(r),weight:4,opacity:.9}); l.bindPopup(Popup.jalan(r),{maxWidth:300}); l.on('click',()=>highlightCard(r.id)); App._groups.jalan.addLayer(l); }); // Parsil App._groups.parsil.clearLayers(); db.parsil.forEach(r=>{ const clr=CFG.parsil.color(r); const p=L.polygon(r.coords,{color:clr,weight:2,fillColor:clr,fillOpacity:.2}); p.bindPopup(Popup.parsil(r),{maxWidth:300}); p.on('click',()=>highlightCard(r.id)); App._groups.parsil.addLayer(p); }); }