Files
2026-06-10 21:46:56 +07:00

3.8 KiB
Raw Permalink Blame History

SIG Penduduk Miskin Berbasis Rumah Ibadah

Aplikasi Sistem Informasi Geografis (SIG) untuk pendataan penduduk miskin berdasarkan wilayah radius rumah ibadah terdekat.


📁 Struktur Folder

sig-kemiskinan/
├── index.html              ← Halaman utama (Leaflet + JS)
├── database.sql            ← Schema + data contoh
├── includes/
│   └── config.php          ← Koneksi DB + fungsi utilitas
├── api/
│   ├── rumah_ibadah.php    ← CRUD Rumah Ibadah
│   ├── penduduk.php        ← CRUD Penduduk Miskin
│   ├── geocode.php         ← Reverse Geocoding (Nominatim)
│   └── update_radius.php   ← Update radius + reassign
└── README.md

⚙️ Setup

1. Persyaratan

  • PHP 7.4+ (atau 8.x)
  • MySQL 5.7+ / MariaDB
  • Web server (Apache/Nginx) atau PHP built-in server

2. Database

-- Import file database.sql ke MySQL:
mysql -u root -p < database.sql

Atau lewat phpMyAdmin: Import → pilih database.sql

3. Konfigurasi DB

Edit includes/config.php:

define('DB_HOST', 'localhost');
define('DB_USER', 'root');       // ganti sesuai user MySQL Anda
define('DB_PASS', '');           // ganti dengan password MySQL
define('DB_NAME', 'sig_kemiskinan');

4. Jalankan

# Opsi 1: PHP built-in server (development)
cd sig-kemiskinan
php -S localhost:8080

# Opsi 2: Taruh di folder htdocs (XAMPP/WAMP)
# Copy folder ke C:/xampp/htdocs/sig-kemiskinan
# Akses: http://localhost/sig-kemiskinan

🗺️ Cara Penggunaan

Tambah Rumah Ibadah

  1. Klik tombol "+ Rumah Ibadah" (pojok kanan atas)
  2. Kursor berubah → klik lokasi di peta
  3. Isi form: Nama, Jenis, PIC, No. WA, Radius
  4. Alamat otomatis terisi dari reverse geocoding (Nominatim/OSM)
  5. Klik Simpan

Tambah Penduduk Miskin

  1. Klik tombol "+ Penduduk"
  2. Klik lokasi rumah di peta
  3. Isi: Nama KK, Jumlah anggota
  4. Sistem otomatis menentukan rumah ibadah terdekat dalam radius
  5. Titik hijau = dalam radius | Titik merah = luar radius

Ubah Radius

  1. Klik marker rumah ibadah → popup → tombol 📐 Radius
  2. Atau klik ikon 📐 di list sidebar
  3. Drag slider untuk mengubah radius (preview langsung)
  4. Klik Simpan → semua penduduk di-reassign otomatis

Logika Overlap

Jika penduduk masuk dalam radius >1 rumah ibadah: → Diassign ke rumah ibadah yang paling dekat (Haversine distance)


🔌 API Endpoints

Method URL Fungsi
GET api/rumah_ibadah.php Semua rumah ibadah + stats
POST api/rumah_ibadah.php Tambah rumah ibadah
PUT api/rumah_ibadah.php Update rumah ibadah
DELETE api/rumah_ibadah.php?id=X Hapus
GET api/penduduk.php Semua penduduk
POST api/penduduk.php Tambah penduduk
PUT api/penduduk.php Update penduduk
DELETE api/penduduk.php?id=X Hapus
GET api/geocode.php?lat=X&lng=Y Reverse geocoding
POST api/update_radius.php Update radius + reassign

🧮 Algoritma Radius

Jarak = Haversine(lat1, lng1, lat2, lng2)  // dalam meter

Untuk setiap penduduk P:
  candidates = [ibadah | jarak(P, ibadah) <= ibadah.radius]
  if candidates:
      assign P → min(candidates, key=jarak)
  else:
      P.rumah_ibadah_id = NULL  // luar radius semua

🖥️ Fitur UI

  • Peta Leaflet dengan tile OpenStreetMap
  • Sidebar panel: list Rumah Ibadah & Penduduk
  • Stats bar: total ibadah, KK, jiwa, tercakup/tidak
  • Radius fleksibel via slider (1003000m, default 500m)
  • Lingkaran radius real-time di peta
  • Reverse geocoding otomatis saat klik peta
  • Warna marker penduduk: hijau (dalam radius) / merah (luar)
  • Popup informatif + tombol CRUD langsung dari peta
  • Responsive mobile-friendly
  • Dark theme modern