UAS SIG Proyek WebGis
This commit is contained in:
@@ -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 (100–3000m, 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
|
||||
Reference in New Issue
Block a user