# WebGIS Pontianak WebGIS Pontianak adalah proyek Sistem Informasi Geografis berbasis web untuk menampilkan dan mengelola data spasial di wilayah Pontianak. Proyek ini berisi tiga modul utama: WebGIS geometri dasar, WebGIS lokasi SPBU, dan WebGIS sosial untuk pemetaan masjid serta penduduk miskin. Aplikasi dibuat menggunakan PHP native, MySQL, JavaScript, Leaflet.js, Leaflet Draw, dan CSS vanilla. Proyek ini cocok dijalankan di lingkungan lokal seperti XAMPP. ## Fitur Utama - Dashboard utama untuk memilih modul WebGIS. - Peta interaktif berbasis Leaflet. - CRUD data spasial melalui marker, polyline, dan polygon. - Penyimpanan data ke database MySQL. - Panel admin untuk pengelolaan data sosial. - Analisis radius layanan masjid terhadap penduduk miskin. - Visualisasi heatmap dan indikator blind spot pada modul sosial. ## Modul Aplikasi ### 1. WebGIS Geometri Lokasi publik: `geometri/index.php` Lokasi admin: `geometri/admin.php` Modul ini digunakan untuk latihan dan pengelolaan data geometri dasar. Fitur publik: - Menampilkan data point, jalan/polyline, dan polygon/parsil. - Melihat detail data melalui popup peta. Fitur admin: - Menampilkan data point, jalan/polyline, dan polygon/parsil. - Menambah point dengan nama dan kode point. - Menambah jalan dengan nama dan klasifikasi. - Menambah polygon/parsil dengan nama area dan status kepemilikan. - Mengedit bentuk jalan dan polygon langsung dari peta. - Menghapus data melalui tools Leaflet Draw. ### 2. WebGIS SPBU Lokasi publik: `spbu/index.php` Lokasi admin: `spbu/admin.php` Modul ini digunakan untuk memetakan lokasi SPBU di Pontianak. Fitur publik: - Menampilkan titik SPBU. - Membedakan SPBU 24 jam dan tidak 24 jam. - Toggle layer untuk menampilkan/menyembunyikan SPBU berdasarkan status. Fitur admin: - Login admin. - Menampilkan titik SPBU. - Membedakan SPBU 24 jam dan tidak 24 jam. - Menambah titik SPBU dari peta. - Mengisi nama SPBU, nomor SPBU, dan status operasional. - Menghapus titik SPBU. - Toggle layer untuk menampilkan/menyembunyikan SPBU berdasarkan status. ### 3. WebGIS Sosial Lokasi publik: `sosial/index.php` Lokasi admin: `sosial/admin.php` Modul ini digunakan untuk pemetaan sosial, khususnya lokasi masjid dan penduduk miskin. Sistem menghitung apakah penduduk miskin berada di dalam radius layanan masjid atau masuk kategori blind spot. Fitur publik: - Menampilkan lokasi masjid dan penduduk miskin. - Menampilkan radius layanan masjid. - Menampilkan status penduduk miskin, apakah berada dalam jangkauan masjid atau blind spot. - Menampilkan heatmap kepadatan penduduk miskin. - Menampilkan statistik sosial dan rekomendasi jenis bantuan. Fitur admin: - Login admin. - Menambah titik masjid. - Menambah titik penduduk miskin. - Mengatur radius layanan masjid dari 100 sampai 5000 meter. - Mengubah jenis bantuan yang direkomendasikan. - Menghapus data masjid atau penduduk miskin. ## Teknologi yang Digunakan - HTML5 - CSS3 vanilla - JavaScript vanilla - PHP native - MySQL - Leaflet.js - Leaflet Draw - Leaflet Heat - Leaflet GeometryUtil - OpenStreetMap tile layer - Nominatim reverse geocoding untuk membantu mengambil alamat penduduk ## Struktur Folder ```text WebGIS2026/ ├── css/ │ └── style.css ├── geometri/ │ └── index.php ├── js/ │ ├── draw_geometri.js │ ├── draw_sosial.js │ ├── draw_sosial_public.js │ ├── draw_spbu_point.js │ └── ... ├── php/ │ ├── db.php │ ├── insert.php │ ├── insert_line.php │ ├── insert_masjid.php │ ├── insert_penduduk.php │ ├── insert_polygon.php │ ├── show_geometri.php │ ├── show_sosial.php │ ├── show_spbu.php │ ├── update_masjid.php │ ├── update_penduduk.php │ └── delete.php ├── sosial/ │ ├── index.php │ ├── login.php │ ├── admin.php │ └── logout.php ├── spbu/ │ └── index.php ├── index.php └── README.md ``` ## Persyaratan Pastikan perangkat sudah memiliki: - XAMPP atau web server lokal lain yang mendukung PHP dan MySQL. - PHP 7.4 atau lebih baru. - MySQL/MariaDB. - Browser modern. - Koneksi internet untuk memuat library CDN Leaflet, Google Fonts, OpenStreetMap, dan Nominatim. ## Instalasi 1. Clone repository ini atau salin folder proyek ke direktori `htdocs`. ```bash git clone ``` 2. Jika menggunakan XAMPP, letakkan folder proyek di: ```text C:/xampp/htdocs/WebGIS2026 ``` 3. Jalankan Apache dan MySQL dari XAMPP Control Panel. 4. Siapkan konfigurasi database melalui environment variable. Contoh variabel tersedia di `.env.example`. ```text DB_HOST=localhost DB_PORT=3306 DB_DATABASE=webgis_spbu DB_USERNAME=root DB_PASSWORD= ``` Pada Coolify, isi variabel tersebut dari menu Environment Variables project. Jangan menulis password database langsung di `php/db.php`. 5. Jalankan migration database yang sudah disediakan. ```sql SOURCE migrations/001_init_database.sql; ``` File migration tersebut akan membuat database `webgis_spbu`, seluruh tabel aplikasi, dan akun default. 6. Buka aplikasi melalui browser: ```text http://localhost/WebGIS2026/ ``` ## Catatan Deploy Coolify Untuk deploy di Coolify, project ini dapat dijalankan sebagai aplikasi PHP native. Pastikan project memiliki service MySQL/MariaDB, lalu set environment variable berikut pada aplikasi: ```text DB_HOST= DB_PORT=3306 DB_DATABASE=webgis_spbu DB_USERNAME= DB_PASSWORD= ``` Jika service database di Coolify memakai nama variabel `MYSQL_*`, aplikasi juga mendukung: ```text MYSQL_HOST= MYSQL_PORT=3306 MYSQL_DATABASE=webgis_spbu MYSQL_USER= MYSQL_PASSWORD= ``` Docker tidak wajib jika Coolify/Nixpacks berhasil mendeteksi aplikasi PHP dan menyediakan web server PHP. Namun repository ini sudah menyediakan `Dockerfile`, sehingga mode deployment paling stabil di Coolify adalah memilih build dari Dockerfile. Dockerfile tersebut memakai `php:8.2-apache` dan memasang ekstensi `mysqli`. ## Menjalankan Dengan Docker Compose Repository ini juga menyediakan `docker-compose.yml` untuk menjalankan seluruh service secara lokal: - `app`: aplikasi PHP Apache - `db`: MySQL 8.4 - `phpmyadmin`: panel database Jalankan: ```bash docker compose up -d --build ``` URL akses: ```text Aplikasi: http://localhost:8080 phpMyAdmin: http://localhost:8081 ``` Kredensial database default Docker Compose: ```text Host: db Port internal: 3306 Port host/lokal: 3307 Database: webgis_spbu Username: webgis_user Password: webgis_password Root password: root_password ``` File migration di folder `migrations/` akan otomatis dijalankan oleh MySQL saat volume database pertama kali dibuat. File `001_init_database.sql` membuat struktur tabel dan akun login, sedangkan `002_seed_sample_data.sql` mengisi data contoh untuk Docker Compose. Data contoh yang disediakan: - 3 point geometri - 3 polyline jalan - 3 polygon/parsil - 7 SPBU, terdiri dari 5 SPBU 24 jam dan 2 tidak 24 jam - 3 masjid dengan radius layanan - 14 data penduduk miskin, termasuk minimal 1 blind spot - akun `admin / password` dan `publik / password` Jika migration atau seed berubah dan ingin mengulang dari awal, hentikan container lalu hapus volume database: ```bash docker compose down -v docker compose up -d --build ``` Catatan: perintah `down -v` akan menghapus data database container. ## Cara Penggunaan ### Membuka Dashboard Utama 1. Buka `http://localhost/WebGIS2026/`. 2. Pilih salah satu modul: - WebGIS Geometri - WebGIS SPBU - WebGIS Sosial ### Menggunakan Modul Geometri 1. Buka `http://localhost/WebGIS2026/geometri/`. 2. Gunakan toolbar gambar di sisi peta. 3. Pilih marker untuk menambah point. 4. Pilih polyline untuk menambah jalan. 5. Pilih polygon untuk menambah parsil/area. 6. Isi form yang muncul pada popup. 7. Klik tombol simpan. 8. Untuk mengedit jalan atau polygon, gunakan tombol edit pada toolbar Leaflet Draw. 9. Untuk menghapus data, gunakan tombol delete pada toolbar atau tombol hapus pada popup jika tersedia. ### Menggunakan Modul SPBU 1. Buka `http://localhost/WebGIS2026/spbu/`. 2. Klik tombol marker pada toolbar peta. 3. Klik lokasi SPBU pada peta. 4. Isi data: - Nama SPBU - Nomor SPBU - Status operasional: `24 Jam` atau `Tidak 24 Jam` 5. Klik simpan. 6. Gunakan tombol layer `24 Jam` dan `Tidak 24 Jam` untuk memfilter tampilan. 7. Klik marker SPBU untuk melihat detail atau menghapus data. ### Login Admin 1. Buka salah satu dashboard publik: - `http://localhost/WebGIS2026/geometri/` - `http://localhost/WebGIS2026/spbu/` - `http://localhost/WebGIS2026/sosial/` 2. Klik tombol `Admin Login`. 3. Masukkan salah satu akun default: ```text Role Admin Username: admin Password: password Role Publik Username: publik Password: password ``` 4. Akun `admin` akan diarahkan ke panel admin sesuai project yang sedang dibuka. Akun `publik` diarahkan ke dashboard publik. Dashboard publik juga dapat diakses tanpa login. Catatan: akun default berasal dari tabel `users`. Ubah atau tambah akun melalui database, bukan dari `sosial/login.php`. ### Menambah Data Masjid 1. Login ke panel admin sosial. 2. Pilih mode `Tambah Masjid`. 3. Klik lokasi masjid pada peta. 4. Isi nama masjid dan PIC atau penanggung jawab. 5. Atur radius deteksi menggunakan slider. 6. Klik simpan. 7. Sistem akan menampilkan marker masjid dan lingkaran radius layanan. ### Menambah Data Penduduk Miskin 1. Login ke panel admin sosial. 2. Pilih mode `Tambah Pend. Miskin`. 3. Klik lokasi penduduk pada peta. 4. Isi data: - Nama kepala keluarga - Jumlah anggota keluarga - Alamat - Penghasilan - Kondisi rumah - Sumber air 5. Klik simpan. 6. Sistem akan menghitung skor kerentanan dan rekomendasi jenis bantuan. 7. Jika penduduk berada di dalam radius masjid, marker akan ditandai sebagai terjangkau. Jika tidak, penduduk berisiko tinggi dapat masuk ke daftar blind spot. ### Mengubah Radius Layanan Masjid 1. Login ke panel admin sosial. 2. Klik marker masjid. 3. Geser slider radius layanan. 4. Klik `Simpan Radius`. 5. Sistem akan menghitung ulang status jangkauan penduduk miskin secara otomatis. ### Mengubah Jenis Bantuan 1. Login ke panel admin sosial. 2. Klik marker penduduk miskin. 3. Pilih jenis bantuan dari dropdown. 4. Klik `Simpan Bantuan`. ### Logout Admin Klik tombol `Keluar` pada panel admin sosial untuk mengakhiri sesi admin. ## Alur Singkat Sistem Sosial 1. Admin memasukkan data masjid beserta radius layanan. 2. Admin memasukkan data penduduk miskin. 3. Sistem menghitung jarak penduduk miskin terhadap masjid terdekat. 4. Penduduk yang berada dalam radius masjid dianggap masuk cakupan sosial masjid. 5. Penduduk yang berada di luar radius, terutama dengan skor kerentanan tinggi, ditandai sebagai blind spot. 6. Data ini dapat digunakan sebagai dasar prioritas bantuan, distribusi program sosial, dan evaluasi wilayah yang belum terjangkau. ## Endpoint PHP Beberapa endpoint utama yang digunakan aplikasi: | Endpoint | Fungsi | | --- | --- | | `php/show_geometri.php` | Mengambil data point, jalan, dan parsil | | `php/show_spbu.php` | Mengambil data SPBU | | `php/show_sosial.php` | Mengambil data masjid dan penduduk miskin | | `php/insert_point.php` | Menambah data point geometri | | `php/insert.php` | Menambah data SPBU | | `php/insert_line.php` | Menambah data jalan | | `php/insert_polygon.php` | Menambah data parsil | | `php/insert_masjid.php` | Menambah data masjid | | `php/insert_penduduk.php` | Menambah data penduduk miskin | | `php/update_line.php` | Mengubah geometri jalan | | `php/update_polygon.php` | Mengubah geometri parsil | | `php/update_masjid.php` | Mengubah radius layanan masjid | | `php/update_penduduk.php` | Mengubah jenis bantuan penduduk | | `php/delete.php` | Menghapus data berdasarkan tipe | ## Catatan Keamanan - Jangan gunakan kredensial admin default di server publik. - Jangan menyimpan password database asli di repository publik. - Pertimbangkan menggunakan file konfigurasi lokal seperti `.env` jika proyek dikembangkan lebih lanjut. - Tambahkan validasi session untuk seluruh endpoint admin jika aplikasi akan dipakai di production. - Batasi akses database sesuai kebutuhan aplikasi. ## Rencana Pengembangan - Import/export data GeoJSON. - Filter data berdasarkan kecamatan atau kelurahan. - Pemisahan akses admin dan publik untuk seluruh modul WebGIS. - Upload dokumentasi/foto penduduk atau masjid. - Dashboard laporan bantuan sosial. - Integrasi data batas administrasi. - Autentikasi admin berbasis database. ## Lisensi Proyek ini dibuat untuk kebutuhan pembelajaran dan pengembangan WebGIS. Silakan sesuaikan lisensi sesuai kebutuhan repository.