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

133 lines
3.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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
```sql
-- 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`:
```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
```bash
# 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