From 0108c35a05e4d079c3de7df1e0f3d3fce923ae20 Mon Sep 17 00:00:00 2001 From: powji17 Date: Wed, 10 Jun 2026 20:01:57 +0700 Subject: [PATCH] menambahkan data jumlah rumah prasejahtera yang tercakup bantuan dari rumah ibadah pada popup --- .../api/rumahibadah/load_ibadah.php | 34 ++++++- WebGISPovertyMapping/assets/js/script.js | 88 ++++++++++++++----- 2 files changed, 99 insertions(+), 23 deletions(-) diff --git a/WebGISPovertyMapping/api/rumahibadah/load_ibadah.php b/WebGISPovertyMapping/api/rumahibadah/load_ibadah.php index af97af8..d5ff292 100644 --- a/WebGISPovertyMapping/api/rumahibadah/load_ibadah.php +++ b/WebGISPovertyMapping/api/rumahibadah/load_ibadah.php @@ -1,8 +1,38 @@ query("SELECT * FROM rumah_ibadah"); $data = []; -while ($row = $result->fetch_assoc()) $data[] = $row; + +while ($row = $result->fetch_assoc()) { + $id = $row['id']; + $lat = $row['lat']; + $lng = $row['lng']; + $radius_m = $row['radius_m']; + + // Hitung jumlah rumah prasejahtera dalam radius + // menggunakan formula Haversine langsung di SQL + $stmt = $conn->prepare(" + SELECT COUNT(*) as total + FROM rumah_prasejahtera + WHERE ( + 6371000 * acos( + cos(radians(?)) * cos(radians(lat)) * + cos(radians(lng) - radians(?)) + + sin(radians(?)) * sin(radians(lat)) + ) + ) <= ? + "); + $stmt->bind_param("dddd", $lat, $lng, $lat, $radius_m); + $stmt->execute(); + $hitungResult = $stmt->get_result()->fetch_assoc(); + $stmt->close(); + + $row['jumlah_tercakup'] = (int) $hitungResult['total']; + $data[] = $row; +} + echo json_encode($data); +$conn->close(); ?> \ No newline at end of file diff --git a/WebGISPovertyMapping/assets/js/script.js b/WebGISPovertyMapping/assets/js/script.js index df96197..4f0cca7 100644 --- a/WebGISPovertyMapping/assets/js/script.js +++ b/WebGISPovertyMapping/assets/js/script.js @@ -183,27 +183,73 @@ function loadIbadah() { fillColor: '#8e44ad', fillOpacity: 0.1, weight: 1, dashArray: '5,5' }).addTo(layerIbadah); - marker.bindPopup(`${ib.nama_ibadah}
- Jenis Rumah Ibadah: ${ib.jenis}
- Jangkauan Bantuan: ${ib.radius_m} m -
-
- ${ROLE === 'admin' || ROLE === 'operator' ? ` - - ` : ''} - ${ROLE === 'admin' ? ` - - ` : ''} -
` - ); + const totalPrasejahtera = Object.keys(dataPrasejahtera).length; + const persen = totalPrasejahtera > 0 + ? Math.round((ib.jumlah_tercakup / totalPrasejahtera) * 100) + : 0; + + marker.bindPopup(` +
+ + ${ib.nama_ibadah} + +
+ Jenis: ${ib.jenis}
+ Jangkauan Bantuan: ${ib.radius_m} m
+
+ +
+
+ ${ib.jumlah_tercakup} +
+
+ rumah tercakup dari ${totalPrasejahtera} total +
+ + +
+
+
+
+ ${persen}% dari total prasejahtera +
+
+ +
+ ${ROLE === 'admin' || ROLE === 'operator' ? ` + + ` : ''} + ${ROLE === 'admin' ? ` + + ` : ''} +
+
+ `); marker.on('dragend', function(e) { let pos = e.target.getLatLng();