UAS SIG Proyek WebGis

This commit is contained in:
L4zyL4mb
2026-06-10 21:46:56 +07:00
commit df18a7a99a
35 changed files with 8977 additions and 0 deletions
+132
View File
@@ -0,0 +1,132 @@
# 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