# πŸ—ΊοΈ WebGIS SPBU - Sistem Informasi Lokasi Stasiun Pengisian Bahan Bakar Umum Sistem Informasi Geografis berbasis web untuk memvisualisasikan dan mengelola data Stasiun Pengisian Bahan Bakar Umum (SPBU) di Pontianak. Dibangun menggunakan Leaflet.js sebagai peta interaktif, PHP sebagai backend, dan MySQL sebagai database. --- ## ✨ Fitur Utama ### πŸ—ΊοΈ Visualisasi Peta * Peta interaktif menggunakan Leaflet.js * Tile map dari CartoDB Voyager * Marker kustom untuk setiap SPBU * Popup informasi detail SPBU * Zoom dan navigasi yang smooth ### πŸ“Š Dashboard Sidebar * Statistik total SPBU * Jumlah SPBU 24 Jam * Daftar SPBU yang dapat dicari * Klik untuk zoom ke lokasi SPBU ### πŸ” Sistem Autentikasi * Login admin dengan session PHP * Password hashing menggunakan bcrypt * Protected API endpoints * Auto-logout saat session expired * Logout manual dengan konfirmasi ### ✏️ Manajemen Data (Admin Only) * **Tambah SPBU**: Mode pilih titik di peta β†’ isi form β†’ simpan * **Edit SPBU**: Update nama, nomor, status, dan koordinat * **Hapus SPBU**: Hapus dengan konfirmasi * **Pindah Lokasi**: Drag & drop marker untuk update koordinat * **Auto-save**: Perubahan langsung tersimpan ke database ### 🎨 Visual Marker * **SPBU 24 Jam**: Marker berwarna **Biru** (`#3b82f6`) * **SPBU Terbatas**: Marker berwarna **Hijau** (`#10b981`) * Animasi pulse pada marker sementara saat memilih lokasi ### πŸ” Pencarian * Search bar di header dan sidebar mobile * Filter berdasarkan nama atau nomor SPBU * Real-time filtering * Klik hasil untuk zoom ke lokasi --- ## πŸ“ Struktur Project ```text SPBU/ β”‚ β”œβ”€β”€ index.php # Main application file β”‚ β”œβ”€β”€ config/ β”‚ └── database.php # Database configuration & connection β”‚ β”œβ”€β”€ api/ β”‚ β”œβ”€β”€ get_spbu.php # GET - Fetch all SPBU data β”‚ β”œβ”€β”€ add_spbu.php # POST - Add new SPBU β”‚ β”œβ”€β”€ update_spbu.php # PUT - Update SPBU data β”‚ β”œβ”€β”€ update_position.php # PUT - Update marker position only β”‚ β”œβ”€β”€ delete_spbu.php # DELETE - Remove SPBU β”‚ β”œβ”€β”€ login.php # POST - Admin authentication β”‚ β”œβ”€β”€ logout.php # GET - Destroy session β”‚ └── check_session.php # GET - Check admin session status β”‚ β”œβ”€β”€ database/ β”‚ └── spbu_db.sql # Database schema & sample data β”‚ └── README.md # Project documentation ``` --- ## πŸ—„οΈ Database Schema ### Tabel: `admin` | Kolom | Tipe | Deskripsi | | ---------- | ------------ | ------------------------ | | id | INT (PK) | Auto-increment ID | | username | VARCHAR(50) | Username admin (unique) | | password | VARCHAR(255) | Password (bcrypt hashed) | | created_at | TIMESTAMP | Waktu pembuatan akun | ### Tabel: `spbu` | Kolom | Tipe | Deskripsi | | ---------- | ------------- | ---------------------------- | | id | INT (PK) | Auto-increment ID | | nama | VARCHAR(200) | Nama SPBU | | no_spbu | VARCHAR(50) | Nomor registrasi SPBU | | status | ENUM | '24jam' atau 'terbatas' | | latitude | DECIMAL(10,7) | Koordinat latitude | | longitude | DECIMAL(10,7) | Koordinat longitude | | created_at | TIMESTAMP | Waktu pembuatan data | | updated_at | TIMESTAMP | Waktu update terakhir (auto) | --- ## πŸš€ Instalasi ### Prasyarat * **Web Server**: Apache 2.4+ atau Nginx * **PHP**: Versi 7.4 atau lebih tinggi * **MySQL**: Versi 5.7 atau lebih tinggi * **PHP Extensions**: PDO, PDO_MySQL, JSON, Session ### Langkah Instalasi #### 1. Clone atau Download Project ```bash git clone https://git.ifuntanhub.dev/FH/WebGIS-Tugas-Setiap-Pertemuan.git cd SPBU ``` Atau download ZIP dan extract ke folder web server Anda (misal: `htdocs/SPBU`). #### 2. Setup Database ```bash # Login ke MySQL mysql -u root -p # Import database source /path/to/database/spbu_db.sql ``` Atau melalui phpMyAdmin: * Buat database baru: `spbu_db` * Import file `database/spbu_db.sql` #### 3. Konfigurasi Database Edit file `config/database.php`: ```php class Database { private $host = "localhost"; // Host database private $db_name = "spbu_db"; // Nama database private $username = "root"; // Username MySQL private $password = ""; // Password MySQL // ... } ``` #### 4. Set Folder Permissions ```bash # Pastikan web server bisa membaca semua file chmod -R 755 webgis-spbu/ ``` #### 5. Akses Aplikasi Buka browser dan akses: ```text http://localhost/SPBU/ ``` --- ## πŸ”‘ Login Admin ### Default Credentials * Username: `admin` * Password: `admin123` ⚠️ **Keamanan:** Ganti password default segera setelah instalasi! Gunakan password hash generator bcrypt untuk membuat password baru. --- ## πŸ“– Panduan Penggunaan ### Mode Normal (Public) * Melihat SPBU: Buka peta, semua marker SPBU akan ditampilkan * Info Detail: Klik marker untuk melihat informasi SPBU (nama, nomor, status, koordinat) * Pencarian: Gunakan search bar di header untuk mencari SPBU * Navigasi: Klik item di sidebar untuk zoom ke lokasi SPBU * Statistik: Lihat total SPBU dan jumlah SPBU 24 jam di sidebar ### Mode Admin #### Login Klik tombol "Login" di pojok kanan atas β†’ masukkan kredensial #### Tambah SPBU * Klik tombol "Tambah" di sidebar * Akan muncul indikator "Mode Pilih Titik" * Klik pada peta untuk memilih lokasi * Isi form yang muncul (nama, nomor, status) * Klik "Simpan" #### Edit SPBU * Klik marker SPBU * Klik tombol "Edit" di popup * Ubah data yang diperlukan * Klik "Simpan" #### Hapus SPBU * Klik marker SPBU * Klik tombol "Hapus" di popup * Konfirmasi penghapusan #### Pindah Lokasi * Tahan (hold) marker yang ingin dipindahkan * Geser (drag) ke lokasi baru * Lepaskan (drop), posisi akan auto-update #### Logout Klik ikon logout di samping toggle admin --- ## 🎨 Kustomisasi ### Mengubah Lokasi Awal Peta Edit di `index.php` pada fungsi `initMap()`: ```javascript // Format: [latitude, longitude], zoomLevel map = L.map('map', { zoomControl: true }).setView([-0.0263, 109.3425], 13); ``` ### Mengubah Warna Marker Edit di `index.php` pada fungsi `createSpbuIcon()`: ```javascript // Warna untuk 24 jam (biru) dan terbatas (hijau) const color = status === '24jam' ? '#3b82f6' : '#10b981'; ``` ### Mengubah Tile Map Edit di `index.php` pada fungsi `initMap()`: ```javascript // Ganti URL tile provider L.tileLayer('URL_TILE_PROVIDER', { ... }).addTo(map); ``` ### Menambah Data Contoh Edit file `database/spbu_db.sql` dan tambahkan INSERT statements: ```sql INSERT INTO spbu (nama, no_spbu, status, latitude, longitude) VALUES ('SPBU Contoh', '00.000.00', '24jam', -0.0263, 109.3425); ``` --- ## πŸ”’ Keamanan Aplikasi ini memiliki beberapa lapisan keamanan: * Session PHP: Autentikasi admin menggunakan session * Password Hashing: Password disimpan menggunakan bcrypt * API Protection: Setiap endpoint admin memeriksa session * Input Validation: Validasi input di client dan server side * CORS Headers: Protected API access ### ⚠️ Rekomendasi Keamanan Tambahan * Implementasi CSRF token * Gunakan HTTPS di production * Rate limiting untuk API endpoints * Backup database secara berkala --- ## πŸ› οΈ Teknologi yang Digunakan ### Frontend * HTML5/CSS3 - Struktur dan styling * Tailwind CSS - Utility-first CSS framework * JavaScript (ES6+) - Interaktivitas dan logika client * Leaflet.js 1.9.4 - Library peta interaktif * CartoDB Voyager - Basemap tiles ### Backend * PHP 7.4+ - Server-side scripting * PDO - Database abstraction layer * MySQL - Relational database ### Libraries & Plugins * Fontsource Inter - Font keluarga Inter * SVG Icons - Heroicons-style icons --- ## πŸ› Troubleshooting ### 1. Database Connection Error ```text Solusi: - Cek kredensial di config/database.php - Pastikan MySQL service running - Cek nama database sudah benar ``` ### 2. Session Tidak Berfungsi ```text Solusi: - Pastikan folder session PHP writable - Cek konfigurasi session di php.ini - Clear browser cache ``` ### 3. Marker Tidak Muncul ```text Solusi: - Cek console browser untuk error JavaScript - Pastikan API get_spbu.php berfungsi - Cek data di database ``` ### 4. Tidak Bisa Login ```text Solusi: - Cek username & password default - Reset password dengan bcrypt hash generator - Cek session PHP berfungsi ``` ### 5. Peta Tidak Loading ```text Solusi: - Cek koneksi internet (untuk tile map) - Cek tidak ada error JavaScript - Pastikan Leaflet.js loaded dengan benar ``` --- ## πŸ“Š API Documentation ### Endpoints | Method | Endpoint | Auth | Deskripsi | | ------ | ------------------------ | ---- | --------------------------- | | GET | /api/get_spbu.php | No | Mendapatkan semua data SPBU | | POST | /api/add_spbu.php | Yes | Menambah SPBU baru | | PUT | /api/update_spbu.php | Yes | Mengupdate data SPBU | | PUT | /api/update_position.php | Yes | Update posisi marker saja | | DELETE | /api/delete_spbu.php | Yes | Menghapus SPBU | | POST | /api/login.php | No | Login admin | | GET | /api/logout.php | Yes | Logout admin | | GET | /api/check_session.php | No | Cek status session | ### Contoh Request/Response #### Tambah SPBU ```json POST /api/add_spbu.php Content-Type: application/json { "nama": "SPBU Contoh", "no_spbu": "00.000.00", "status": "24jam", "latitude": -0.0263, "longitude": 109.3425 } ``` Response 201: ```json { "message": "SPBU berhasil ditambahkan", "id": 4 } ``` --- ## πŸ”„ Changelog ### Version 1.0.0 (2024) * ✨ Initial release * πŸ—ΊοΈ Peta interaktif dengan Leaflet.js * πŸ” Sistem login admin * ✏️ CRUD operasi untuk data SPBU * 🎨 Marker berbeda untuk status SPBU * πŸ” Pencarian dan navigasi * πŸ“Š Dashboard statistik * πŸ—„οΈ MySQL database integration * πŸ”’ Basic security implementation