menambahkan legenda peta
This commit is contained in:
@@ -6,17 +6,42 @@ const popup = L.popup();
|
||||
const daftarMarker = {}, daftarPolyline = {}, daftarPolygon = {};
|
||||
|
||||
// 1. BUAT KERTAS TRANSPARAN (LAYER GROUPS)
|
||||
const layerPrasejahtera = L.layerGroup().addTo(map);
|
||||
const layerIbadah = L.layerGroup().addTo(map);
|
||||
const layerTercakup = L.layerGroup().addTo(map);
|
||||
const layerTidakTercakup = L.layerGroup().addTo(map);
|
||||
const layerIbadah = L.layerGroup().addTo(map);
|
||||
const layerRadius = L.layerGroup().addTo(map);
|
||||
|
||||
// 2. DAFTARKAN LAYER-LAYER TERSEBUT KE DALAM CONTROL PANEL
|
||||
const overlays = {
|
||||
"<i class='fa-solid fa-house-chimney-crack' style='color:red'></i> Rumah Prasejahtera": layerPrasejahtera,
|
||||
"<span style='color:#27ae60'>⌂</span> Prasejahtera Tercakup": layerTercakup,
|
||||
"<span style='color:#e74c3c'>⌂</span> Prasejahtera Tidak Tercakup": layerTidakTercakup,
|
||||
"<i class='fa-solid fa-place-of-worship' style='color:purple'></i> Rumah Ibadah": layerIbadah,
|
||||
"○ Radius Jangkauan": layerRadius,
|
||||
};
|
||||
|
||||
// 3. MUNCULKAN KONTROL DI POJOK KANAN ATAS PETA
|
||||
L.control.layers(null, overlays, { collapsed: false }).addTo(map);
|
||||
let legend = L.control({ position: 'topright' });
|
||||
legend.onAdd = function() {
|
||||
let div = L.DomUtil.create('div', 'map-legend');
|
||||
div.innerHTML = `
|
||||
<h4><i class="fa-solid fa-circle-info"></i> Legenda</h4>
|
||||
<div class="legend-item">
|
||||
<span class="legend-dot" style="background:#27ae60;"></span> Prasejahtera Tercakup
|
||||
</div>
|
||||
<div class="legend-item">
|
||||
<span class="legend-dot" style="background:#e74c3c;"></span> Prasejahtera Tidak Tercakup
|
||||
</div>
|
||||
<hr style="margin:6px 0; border-color:#eee;">
|
||||
<div class="legend-item"><span class="legend-dot" style="background:#1abc9c;"></span> Masjid</div>
|
||||
<div class="legend-item"><span class="legend-dot" style="background:#3498db;"></span> Gereja</div>
|
||||
<div class="legend-item"><span class="legend-dot" style="background:#e67e22;"></span> Vihara</div>
|
||||
<div class="legend-item"><span class="legend-dot" style="background:#9b59b6;"></span> Pura</div>
|
||||
<div class="legend-item"><span class="legend-dot" style="background:#e74c3c;"></span> Klenteng</div>
|
||||
<hr style="margin:6px 0; border-color:#eee;">
|
||||
<div class="legend-item"><span class="legend-radius"></span> Radius Jangkauan</div>
|
||||
`;
|
||||
return div;
|
||||
};
|
||||
legend.addTo(map);
|
||||
|
||||
let currentMode = 'none';
|
||||
let tempLatLngs = [], tempPolyline = null;
|
||||
@@ -112,6 +137,14 @@ function perbaruiWarnaPrasejahtera() {
|
||||
// Ganti ikon sesuai status
|
||||
let ikonBaru = tercakup ? ikonPrasejahteraTercakup : ikonPrasejahtera;
|
||||
p.marker.setIcon(ikonBaru);
|
||||
|
||||
layerTercakup.removeLayer(p.marker);
|
||||
layerTidakTercakup.removeLayer(p.marker);
|
||||
if (tercakup) {
|
||||
p.marker.addTo(layerTercakup);
|
||||
} else {
|
||||
p.marker.addTo(layerTidakTercakup);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -181,7 +214,7 @@ function loadIbadah() {
|
||||
let lingkaran = L.circle([ib.lat, ib.lng], {
|
||||
radius: ib.radius_m, color: '#8e44ad',
|
||||
fillColor: '#8e44ad', fillOpacity: 0.1, weight: 1, dashArray: '5,5'
|
||||
}).addTo(layerIbadah);
|
||||
}).addTo(layerRadius);
|
||||
|
||||
const totalPrasejahtera = Object.keys(dataPrasejahtera).length;
|
||||
const persen = totalPrasejahtera > 0
|
||||
@@ -316,8 +349,17 @@ function loadDB() {
|
||||
let marker = L.marker([rumah.lat, rumah.lng], {
|
||||
icon: ikonPrasejahtera,
|
||||
draggable: ROLE === 'admin' || ROLE === 'operator'
|
||||
})
|
||||
.addTo(layerPrasejahtera);
|
||||
});
|
||||
marker.bindPopup(isiPopup);
|
||||
marker.on('dragend', function(e) {
|
||||
let pos = e.target.getLatLng();
|
||||
dataPrasejahtera[rumah.id].lat = pos.lat;
|
||||
dataPrasejahtera[rumah.id].lng = pos.lng;
|
||||
updateLokasiPrasejahtera(rumah.id, pos.lat, pos.lng);
|
||||
perbaruiWarnaPrasejahtera();
|
||||
});
|
||||
dataPrasejahtera[rumah.id] = { lat: rumah.lat, lng: rumah.lng, marker };
|
||||
daftarMarker['p_' + rumah.id] = marker;
|
||||
marker.bindPopup(isiPopup);
|
||||
marker.on('dragend', function(e) {
|
||||
let pos = e.target.getLatLng();
|
||||
@@ -338,8 +380,10 @@ loadDB();
|
||||
|
||||
// --- FUNGSI UNTUK ME-REFRESH PETA SECARA OTOMATIS (SOFT REFRESH) ---
|
||||
function refreshPeta() {
|
||||
layerPrasejahtera.clearLayers();
|
||||
layerTercakup.clearLayers();
|
||||
layerTidakTercakup.clearLayers();
|
||||
layerIbadah.clearLayers();
|
||||
layerRadius.clearLayers();
|
||||
|
||||
// 2. Bersihkan memori agar ID tidak menumpuk/ganda
|
||||
for (let id in dataIbadah) delete dataIbadah[id];
|
||||
|
||||
Reference in New Issue
Block a user