Files
luthfihadinugroho79 e950468760 add files
2026-06-10 19:42:59 +07:00

505 lines
12 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.
# 🗺️ WebGIS Persebaran Penduduk Miskin
**Sistem Pemetaan Geospasial berbasis React + Node.js + PostgreSQL/PostGIS**
---
## 📋 DAFTAR ISI
1. [Prasyarat](#prasyarat)
2. [Instalasi PostgreSQL + PostGIS di XAMPP](#instalasi-postgresql--postgis)
3. [Setup Database](#setup-database)
4. [Setup Backend (Node.js)](#setup-backend)
5. [Setup Frontend (React)](#setup-frontend)
6. [Menjalankan Aplikasi](#menjalankan-aplikasi)
7. [Struktur Folder](#struktur-folder)
8. [API Endpoint Reference](#api-endpoint-reference)
9. [Troubleshooting](#troubleshooting)
---
## ✅ PRASYARAT
Sebelum mulai, pastikan sudah terinstal:
| Software | Versi Minimum | Link Download |
|----------|--------------|---------------|
| **XAMPP** | 8.0+ | https://www.apachefriends.org |
| **Node.js** | 18.x LTS | https://nodejs.org |
| **PostgreSQL** | 14+ | https://www.postgresql.org/download |
| **PostGIS** | 3.x | Diinstal via Stack Builder |
| **Git** (opsional) | any | https://git-scm.com |
> ⚠️ **PENTING**: PostgreSQL dan PostGIS TIDAK termasuk dalam XAMPP standar.
> XAMPP hanya menyediakan MySQL/MariaDB. Kita install PostgreSQL secara terpisah.
---
## 🐘 INSTALASI POSTGRESQL + POSTGIS
### Langkah 1: Install PostgreSQL
1. Download PostgreSQL dari https://www.postgresql.org/download/windows/
2. Jalankan installer, ikuti wizard:
- Port: **5432** (default)
- Password superuser: catat dengan baik (contoh: `postgres123`)
- Locale: sesuaikan (Indonesian)
3. ✅ Centang "Stack Builder" di akhir instalasi
### Langkah 2: Install PostGIS via Stack Builder
1. Stack Builder otomatis terbuka setelah instalasi PostgreSQL
2. Pilih server PostgreSQL Anda
3. Expand kategori **Spatial Extensions**
4. Centang **PostGIS** (versi terbaru)
5. Klik Next dan ikuti proses download + instalasi
6. Saat diminta "Create spatial database", **LEWATI** (kita buat manual)
### Langkah 3: Verifikasi Instalasi
Buka **SQL Shell (psql)** dari Start Menu:
```sql
-- Login dengan user postgres
Password: [password yang Anda buat]
-- Cek PostGIS
SELECT PostGIS_version();
-- Output: "3.x USE_GEOS=1 ..."
```
---
## 🗄️ SETUP DATABASE
### Langkah 1: Buat Database
Buka **pgAdmin 4** (tersedia di Start Menu setelah install PostgreSQL):
1. Klik kanan **Databases****Create****Database**
2. Isi nama: `webgis_kemiskinan`
3. Klik **Save**
**ATAU** via SQL Shell (psql):
```sql
CREATE DATABASE webgis_kemiskinan;
\c webgis_kemiskinan
```
### Langkah 2: Jalankan Script SQL
**Via pgAdmin 4:**
1. Klik dua kali database `webgis_kemiskinan`
2. Klik kanan → **Query Tool**
3. Buka file: `database/schema.sql` (dari folder project)
4. Klik tombol **▶ Execute** (F5)
**Via psql:**
```bash
# Pastikan Anda ada di folder project
psql -U postgres -d webgis_kemiskinan -f database/schema.sql
```
**Via Command Prompt:**
```cmd
cd C:\xampp\htdocs\webgis-kemiskinan
"C:\Program Files\PostgreSQL\14\bin\psql.exe" -U postgres -d webgis_kemiskinan -f database\schema.sql
```
### Langkah 3: Verifikasi Database
```sql
-- Di pgAdmin Query Tool atau psql:
\c webgis_kemiskinan
-- Cek tabel
\dt
-- Output yang diharapkan:
-- tabel_rumah_ibadah
-- tabel_penduduk
-- tabel_anggota_keluarga
-- Cek data dummy
SELECT nama, jenis FROM tabel_rumah_ibadah;
SELECT nama_kepala_keluarga FROM tabel_penduduk;
-- Cek PostGIS aktif
SELECT PostGIS_version();
```
---
## ⚙️ SETUP BACKEND
### Langkah 1: Masuk ke Folder Backend
```bash
cd webgis-kemiskinan\backend
```
### Langkah 2: Install Dependensi
```bash
npm install
```
### Langkah 3: Konfigurasi Environment
Salin file `.env.example` menjadi `.env`:
```bash
# Windows
copy .env.example .env
# Linux/Mac
cp .env.example .env
```
Edit file `.env` sesuai konfigurasi Anda:
```env
# Server
PORT=5000
NODE_ENV=development
# Database PostgreSQL
DB_HOST=localhost
DB_PORT=5432
DB_NAME=webgis_kemiskinan
DB_USER=postgres
DB_PASSWORD=postgres123 ← GANTI dengan password Anda
# CORS
ALLOWED_ORIGINS=http://localhost:3000,http://localhost:5173
# Upload
UPLOAD_DIR=uploads
MAX_FILE_SIZE=5242880
# Nominatim
NOMINATIM_URL=https://nominatim.openstreetmap.org
NOMINATIM_USER_AGENT=WebGIS-Kemiskinan/1.0
```
### Langkah 4: Buat Folder Upload
```bash
mkdir uploads
```
### Langkah 5: Test Koneksi
```bash
npm run dev
```
Output yang diharapkan:
```
🚀 Server berjalan di http://localhost:5000
✅ Terhubung ke PostgreSQL + PostGIS
📡 Mode: development
```
Test via browser atau Postman:
```
GET http://localhost:5000/api/health
```
Response: `{"status":"ok","timestamp":"..."}`
---
## 🎨 SETUP FRONTEND
### Langkah 1: Masuk ke Folder Frontend
Buka terminal/CMD **baru**:
```bash
cd webgis-kemiskinan\frontend
```
### Langkah 2: Install Dependensi
```bash
npm install
```
### Langkah 3: Jalankan Development Server
```bash
npm run dev
```
Output:
```
VITE v5.x.x ready in 800ms
➜ Local: http://localhost:3000/
➜ Network: http://192.168.x.x:3000/
```
### Langkah 4: Buka di Browser
Buka: **http://localhost:3000**
---
## 🚀 MENJALANKAN APLIKASI (RINGKASAN)
Setiap kali ingin menjalankan aplikasi, buka **2 terminal terpisah**:
### Terminal 1 Backend
```bash
cd webgis-kemiskinan\backend
npm run dev
```
### Terminal 2 Frontend
```bash
cd webgis-kemiskinan\frontend
npm run dev
```
Lalu buka browser: **http://localhost:3000**
---
## 📁 STRUKTUR FOLDER
```
webgis-kemiskinan/
├── 📂 database/
│ └── schema.sql # Script SQL lengkap (jalankan pertama kali)
├── 📂 backend/
│ ├── package.json
│ ├── .env.example # Salin ke .env dan isi konfigurasi
│ ├── .env # Konfigurasi lokal Anda (jangan di-commit)
│ └── src/
│ ├── server.js # Entry point Express
│ ├── config/
│ │ └── database.js # Koneksi PostgreSQL Pool
│ ├── controllers/
│ │ ├── rumahIbadahController.js # CRUD + geospasial ibadah
│ │ ├── pendudukController.js # CRUD + auto-assign ibadah
│ │ ├── geocodeController.js # Reverse geocoding Nominatim
│ │ └── dashboardController.js # Statistik & agregasi
│ ├── routes/
│ │ ├── rumahIbadah.js
│ │ ├── penduduk.js
│ │ ├── geocode.js
│ │ ├── upload.js
│ │ └── dashboard.js
│ ├── middleware/
│ │ └── upload.js # Multer file upload config
│ └── uploads/ # Folder penyimpanan file upload
└── 📂 frontend/
├── package.json
├── vite.config.js # Proxy API ke backend
├── index.html
└── src/
├── main.jsx # React entry point
├── App.jsx # Router + Layout utama
├── index.css # Global styles (dark theme)
├── services/
│ └── api.js # Axios API client
└── pages/
├── DashboardPage.jsx # Statistik & grafik
├── MapPage.jsx # Peta interaktif Leaflet
├── RumahIbadahPage.jsx # CRUD rumah ibadah
└── PendudukPage.jsx # CRUD penduduk miskin
```
---
## 📡 API ENDPOINT REFERENCE
### Rumah Ibadah
| Method | Endpoint | Deskripsi |
|--------|----------|-----------|
| GET | `/api/rumah-ibadah` | Semua rumah ibadah. Query: `?jenis=Masjid` |
| GET | `/api/rumah-ibadah/:id` | Detail + statistik penduduk |
| GET | `/api/rumah-ibadah/terdekat` | Query: `?lat=X&lng=Y&limit=5` |
| POST | `/api/rumah-ibadah` | Tambah baru |
| PUT | `/api/rumah-ibadah/:id` | Update |
| DELETE | `/api/rumah-ibadah/:id` | Hapus |
### Penduduk Miskin
| Method | Endpoint | Deskripsi |
|--------|----------|-----------|
| GET | `/api/penduduk` | Semua. Query: `?status_bantuan=true&limit=50` |
| GET | `/api/penduduk/:id` | Detail + anggota keluarga |
| POST | `/api/penduduk` | Tambah (multipart/form-data, auto-assign ibadah) |
| PUT | `/api/penduduk/:id` | Update (multipart/form-data) |
| PATCH | `/api/penduduk/:id/status` | Update status bantuan saja |
| DELETE | `/api/penduduk/:id` | Hapus |
### Lainnya
| Method | Endpoint | Deskripsi |
|--------|----------|-----------|
| GET | `/api/geocode/reverse` | Query: `?lat=X&lng=Y` |
| POST | `/api/upload` | Upload file (form field: `file`) |
| GET | `/api/dashboard/statistik` | Data statistik dashboard |
| GET | `/api/health` | Health check server |
---
## 🔧 TROUBLESHOOTING
### ❌ Error: "ECONNREFUSED Cannot connect to database"
**Penyebab:** PostgreSQL tidak berjalan atau password salah.
**Solusi:**
1. Buka **Services** Windows (services.msc)
2. Cari **postgresql-x64-14** → Klik **Start**
3. Atau di Command Prompt: `net start postgresql-x64-14`
4. Periksa password di file `.env`
---
### ❌ Error: "extension 'postgis' does not exist"
**Penyebab:** PostGIS belum terinstal atau belum diaktifkan di database.
**Solusi:**
```sql
-- Di pgAdmin, koneksi ke database webgis_kemiskinan
CREATE EXTENSION IF NOT EXISTS postgis;
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
```
---
### ❌ Error: "npm: command not found"
**Penyebab:** Node.js belum terinstal atau belum ada di PATH.
**Solusi:**
1. Download Node.js LTS dari https://nodejs.org
2. Install dengan pilih "Add to PATH"
3. Restart Command Prompt / terminal
4. Test: `node --version` dan `npm --version`
---
### ❌ Error: "Port 5000 already in use"
**Solusi:**
```cmd
# Temukan proses yang menggunakan port 5000
netstat -ano | findstr :5000
# Kill proses (ganti XXXX dengan PID)
taskkill /PID XXXX /F
```
ATAU ganti port di `.env`: `PORT=5001`
---
### ❌ Peta tidak muncul (blank/grey)
**Penyebab:** Leaflet CSS tidak termuat dengan benar.
**Solusi:**
Pastikan di file yang menggunakan Leaflet ada:
```js
import 'leaflet/dist/leaflet.css';
```
---
### ❌ Reverse Geocoding gagal
**Penyebab:** Nominatim rate limit (max 1 request/detik) atau tidak ada internet.
**Solusi:**
- Tunggu beberapa detik lalu coba kembali
- Nominatim memerlukan koneksi internet aktif
- Isi alamat secara manual jika offline
---
### ❌ Upload file gagal
**Penyebab:** Folder `uploads` tidak ada.
**Solusi:**
```bash
cd backend
mkdir uploads
```
---
## 🌐 INTEGRASI XAMPP (Apache sebagai Reverse Proxy Opsional)
Jika ingin mengakses via `http://localhost/webgis` (tanpa port):
1. Aktifkan **mod_proxy** di XAMPP:
Edit `C:\xampp\apache\conf\httpd.conf`, hilangkan tanda `#` dari:
```
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
```
2. Tambahkan konfigurasi di `httpd-vhosts.conf`:
```apache
<VirtualHost *:80>
ProxyPass /api http://localhost:5000/api
ProxyPassReverse /api http://localhost:5000/api
DocumentRoot "C:/xampp/htdocs/webgis-kemiskinan/frontend/dist"
</VirtualHost>
```
3. Build frontend: `cd frontend && npm run build`
4. Restart Apache di XAMPP Control Panel
---
## 📦 BUILD UNTUK PRODUCTION
### Frontend (Build Statis)
```bash
cd frontend
npm run build
# Output: folder dist/ siap di-deploy
```
### Backend (Jalankan Tanpa nodemon)
```bash
cd backend
npm start
# Atau dengan PM2: pm2 start src/server.js --name webgis-backend
```
---
## 💡 TIPS PENGGUNAAN
1. **Menambah Rumah Ibadah**: Masuk ke menu "Rumah Ibadah" → Klik "Tambah" → Klik peta untuk memilih lokasi → Alamat otomatis terisi → Simpan
2. **Menambah Penduduk**: Masuk ke menu "Penduduk Miskin" → Klik "Tambah" → Klik peta untuk memilih lokasi rumah → Sistem otomatis menentukan rumah ibadah terdekat
3. **Melihat di Peta**: Masuk ke menu "Peta Interaktif" → Gunakan filter untuk menyaring tampilan → Klik marker untuk melihat detail
4. **Update Status Bantuan**: Di tabel Penduduk, klik tombol ✓ untuk toggle status sudah/belum dibantu
5. **Lokasi Saya**: Di halaman peta, klik tombol kompas 📍 untuk menampilkan posisi Anda
---
## 📄 LISENSI
MIT License Bebas digunakan untuk keperluan pendidikan dan sosial.
---
*Dibuat dengan ❤️ untuk membantu pemetaan dan penanganan kemiskinan di Indonesia*