# πŸ—ΊοΈ 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 ProxyPass /api http://localhost:5000/api ProxyPassReverse /api http://localhost:5000/api DocumentRoot "C:/xampp/htdocs/webgis-kemiskinan/frontend/dist" ``` 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*