225 lines
6.2 KiB
Markdown
225 lines
6.2 KiB
Markdown
# SIPKEM — Sistem Informasi Pemetaan Kemiskinan
|
|
|
|
Aplikasi WebGIS interaktif untuk memetakan rumah ibadah dan rumah tangga miskin, serta menganalisis jangkauan bantuan di Kota Pontianak, Kalimantan Barat.
|
|
|
|
**Author**
|
|
Nama: Anugerah Az-zuhri Rahman
|
|
NIM: D1041231049
|
|
Kelas: SIG D
|
|
|
|
---
|
|
|
|
## Deskripsi
|
|
|
|
Sistem ini membantu pemangku kepentingan dalam mengidentifikasi sebaran rumah tangga miskin dan menganalisis jangkauan bantuan dari rumah ibadah terdekat. Pengurus dapat mengelola data langsung dari antarmuka peta, sementara pengguna umum dapat melihat seluruh informasi tanpa hak ubah.
|
|
|
|
---
|
|
|
|
## Fitur Utama
|
|
|
|
- Peta interaktif berbasis OpenStreetMap dengan marker rumah ibadah dan rumah miskin
|
|
- Zona jangkauan (radius buffer) dari setiap rumah ibadah, dapat diatur secara dinamis
|
|
- Klasifikasi rumah miskin berdasarkan status jangkauan bantuan
|
|
- Dashboard statistik: total rumah ibadah, total rumah miskin, dan distribusi per wilayah
|
|
- Manajemen data lengkap (tambah, edit, hapus, seret marker) khusus untuk Pengurus
|
|
- Riwayat bantuan per rumah tangga beserta jenis dan tanggal pemberian
|
|
- Sistem autentikasi berbasis peran (Pengguna dan Pengurus)
|
|
|
|
---
|
|
|
|
## Teknologi
|
|
|
|
| Komponen | Teknologi |
|
|
| ---------- | ------------------------------------------------ |
|
|
| Frontend | React, Leaflet.js, React-Leaflet, React Router |
|
|
| Backend | PHP 8+ dengan PDO |
|
|
| Database | MySQL / MariaDB (dengan tipe data spasial POINT) |
|
|
| Build Tool | Vite |
|
|
| Tile Peta | OpenStreetMap |
|
|
|
|
---
|
|
|
|
## Persyaratan Sistem
|
|
|
|
- Server lokal: XAMPP, Laragon, atau sejenisnya dengan PHP 8+ dan MySQL 5.7+
|
|
- Node.js 18+ dan npm
|
|
- Web browser modern
|
|
- Git
|
|
|
|
---
|
|
|
|
## Instalasi
|
|
|
|
**1. Clone Repository**
|
|
|
|
```bash
|
|
git clone https://git.ifuntanhub.dev/anugerah/uas-poverty-mapping.git
|
|
cd sipkem
|
|
```
|
|
|
|
**2. Setup Database**
|
|
|
|
Jalankan script SQL yang tersedia:
|
|
|
|
```bash
|
|
mysql -u root -p < sipkem_database.sql
|
|
```
|
|
|
|
Script akan membuat database `sipkem` beserta seluruh tabel yang dibutuhkan secara otomatis.
|
|
|
|
**3. Konfigurasi Backend**
|
|
|
|
Buka `api.php` dan sesuaikan koneksi database:
|
|
|
|
```php
|
|
define('DB_HOST', 'localhost');
|
|
define('DB_NAME', 'sipkem');
|
|
define('DB_USER', 'root');
|
|
define('DB_PASS', '');
|
|
```
|
|
|
|
**4. Install Dependensi Frontend**
|
|
|
|
```bash
|
|
npm install
|
|
```
|
|
|
|
**5. Jalankan Aplikasi**
|
|
|
|
```bash
|
|
npm run dev
|
|
```
|
|
|
|
Akses melalui `http://localhost:5173`
|
|
|
|
**6. Build untuk Produksi**
|
|
|
|
```bash
|
|
npm run build
|
|
# Salin folder dist/ beserta api.php ke direktori web server
|
|
```
|
|
|
|
---
|
|
|
|
## Struktur Proyek
|
|
|
|
```
|
|
sipkem/
|
|
├── api.php # Seluruh endpoint backend (PHP + PDO)
|
|
├── index.html # Entry point HTML
|
|
├── vite.config.js # Konfigurasi Vite
|
|
├── package.json
|
|
├── sipkem_database.sql # Script setup database lengkap
|
|
├── src/
|
|
│ ├── main.jsx
|
|
│ ├── App.jsx
|
|
│ ├── index.css
|
|
│ ├── pages/
|
|
│ │ ├── AuthPage.jsx # Halaman login & registrasi
|
|
│ │ ├── AuthPage.css
|
|
│ │ ├── MapPage.jsx # Halaman peta utama
|
|
│ │ └── MapPage.css
|
|
│ ├── components/
|
|
│ │ ├── Modal.jsx
|
|
│ │ ├── ModePanel.jsx
|
|
│ │ ├── StatsPanel.jsx
|
|
│ │ ├── LegendPanel.jsx
|
|
│ │ ├── BantuanModal.jsx
|
|
│ │ ├── ConfirmDialog.jsx
|
|
│ │ └── Toast.jsx
|
|
│ ├── hooks/
|
|
│ │ ├── useToast.js
|
|
│ │ └── useConfirm.js
|
|
│ └── utils/
|
|
│ └── api.js # Fungsi komunikasi ke api.php
|
|
```
|
|
|
|
---
|
|
|
|
## Skema Database
|
|
|
|
**Tabel: users**
|
|
| Kolom | Tipe | Keterangan |
|
|
|---|---|---|
|
|
| id | VARCHAR(36) PK | UUID |
|
|
| nama | VARCHAR(100) | Nama pengguna |
|
|
| email | VARCHAR(150) | Unik, digunakan untuk login |
|
|
| password_hash | VARCHAR(255) | Hash bcrypt |
|
|
| role | ENUM | `pengguna` atau `pengurus` |
|
|
|
|
**Tabel: rumah_ibadah**
|
|
| Kolom | Tipe | Keterangan |
|
|
|---|---|---|
|
|
| id | VARCHAR(36) PK | UUID |
|
|
| nama | VARCHAR(150) | Nama rumah ibadah |
|
|
| jenis | VARCHAR(50) | Masjid, Gereja, dll |
|
|
| geom | POINT | Koordinat spasial |
|
|
| jangkauan_m | INT | Radius jangkauan dalam meter |
|
|
|
|
**Tabel: rumah_miskin**
|
|
| Kolom | Tipe | Keterangan |
|
|
|---|---|---|
|
|
| id | VARCHAR(36) PK | UUID |
|
|
| nama_kk | VARCHAR(150) | Nama kepala keluarga |
|
|
| geom | POINT | Koordinat spasial |
|
|
| ri_id | VARCHAR(36) FK | Rumah ibadah yang membina |
|
|
| jarak_ke_ri_m | FLOAT | Jarak ke rumah ibadah dalam meter |
|
|
|
|
**Tabel: jenis_bantuan**
|
|
| Kolom | Tipe | Keterangan |
|
|
|---|---|---|
|
|
| id | VARCHAR(36) PK | UUID |
|
|
| nama | VARCHAR(100) | Nama jenis bantuan |
|
|
| kategori | VARCHAR(50) | Pangan, Kesehatan, dll |
|
|
|
|
**Tabel: riwayat_bantuan**
|
|
| Kolom | Tipe | Keterangan |
|
|
|---|---|---|
|
|
| id | VARCHAR(36) PK | UUID |
|
|
| rm_id | VARCHAR(36) FK | Rumah miskin penerima |
|
|
| bantuan_id | VARCHAR(36) FK | Jenis bantuan |
|
|
| tanggal | DATE | Tanggal pemberian |
|
|
| user_id | VARCHAR(36) FK | Pengurus yang mengonfirmasi |
|
|
|
|
**Tabel: riwayat_binaan**
|
|
| Kolom | Tipe | Keterangan |
|
|
|---|---|---|
|
|
| id | INT PK | Auto increment |
|
|
| rm_id | VARCHAR(36) | Rumah miskin |
|
|
| ri_id_lama | VARCHAR(36) | Rumah ibadah sebelumnya |
|
|
| ri_id_baru | VARCHAR(36) | Rumah ibadah baru |
|
|
|
|
---
|
|
|
|
## Akses dan Hak Pengguna
|
|
|
|
| Fitur | Pengguna | Pengurus |
|
|
| -------------------------- | -------- | -------- |
|
|
| Lihat peta dan marker | Ya | Ya |
|
|
| Lihat detail dan popup | Ya | Ya |
|
|
| Lihat riwayat bantuan | Ya | Ya |
|
|
| Tambah / edit / hapus data | Tidak | Ya |
|
|
| Seret posisi marker | Tidak | Ya |
|
|
| Atur radius jangkauan | Tidak | Ya |
|
|
| Catat dan kelola bantuan | Tidak | Ya |
|
|
|
|
---
|
|
|
|
## Akun Default
|
|
|
|
Setelah menjalankan `sipkem_database.sql`, tersedia akun pengurus bawaan:
|
|
|
|
- Email: `admin@sipkem.id`
|
|
- Password: `admin1234`
|
|
|
|
Ganti password segera setelah instalasi pertama.
|
|
|
|
---
|
|
|
|
## Keamanan
|
|
|
|
- Autentikasi berbasis sesi dengan verifikasi peran di setiap endpoint
|
|
- Password di-hash menggunakan bcrypt melalui `password_hash()`
|
|
- Seluruh query database menggunakan prepared statements (mencegah SQL injection)
|
|
- Validasi dan sanitasi input pada sisi server
|