Files

348 lines
8.9 KiB
Markdown

# Panduan Setup dan Testing Layer Groups SPBU Manager
## 🚀 Quick Start
### 1. Persyaratan
- PHP 5.6+ dengan support SQLite3
- Browser modern dengan support ES6 JavaScript
- Internet connection (untuk CDN libraries)
### 2. Struktur File
```
Projek SPBU 24 JAM/
├── index.html # Main HTML file
├── app.js # Main JavaScript (MODIFIED)
├── css/
│ └── style.css # Styling (MODIFIED with Layers Control CSS)
├── api/
│ ├── config.php # Database configuration
│ ├── save_point.php # API untuk simpan point
│ ├── get_points.php # API untuk ambil points
│ ├── delete_point.php # API untuk hapus point
│ └── ... # API files lainnya
├── db/
│ └── markers.db # SQLite database (auto-created)
└── LAYER_GROUPS_DOCUMENTATION.md # Dokumentasi lengkap
```
### 3. Instalasi & Running
#### Menggunakan PHP Built-in Server (Rekomendasi untuk Development)
```bash
# 1. Navigate ke project folder
cd "d:\Projek SPBU 24 JAM"
# 2. Start PHP server
php -S localhost:8000
# 3. Buka di browser
# http://localhost:8000
```
#### Menggunakan Apache/XAMPP
```bash
# 1. Copy folder ke htdocs
# cp -r "Projek SPBU 24 JAM" "C:\xampp\htdocs\spbu-manager"
# 2. Start Apache di XAMPP Control Panel
# 3. Akses di browser
# http://localhost/spbu-manager
```
---
## 📊 Testing & Demo Data
### Test Case 1: Tambah SPBU 24 Jam
**Steps:**
1. Buka aplikasi di browser
2. Klik tombol "+ Add Point Manually" atau klik di peta
3. Isi form dengan data:
- **Name:** Pertamina SPBU 24 Jam Medan
- **Latitude:** 3.1455
- **Longitude:** 101.6969
- **Open 24 Hours:** ✓ (CHECKED)
4. Klik "Save"
5. **Hasil:** Marker akan muncul dan otomatis masuk ke layer "SPBU 24 Jam"
### Test Case 2: Tambah SPBU Limited Hours
**Steps:**
1. Klik "+ Add Point Manually" atau klik di peta
2. Isi form dengan data:
- **Name:** Pertamina SPBU Jl. Gatot Subroto
- **Latitude:** 3.1400
- **Longitude:** 101.6900
- **Open 24 Hours:** ☐ (UNCHECKED)
3. Klik "Save"
4. **Hasil:** Marker akan muncul dan otomatis masuk ke layer "SPBU Limited Hours"
### Test Case 3: Toggle Layer dengan Layers Control
**Steps:**
1. Pastikan kedua SPBU sudah ditambahkan (dari Test Case 1 & 2)
2. Lihat "Layers Control" di sudut kanan atas peta
3. **Uncheck** "🕐 SPBU 24 Jam"
4. **Hasil:** Marker SPBU 24 Jam hilang dari peta, hanya Limited Hours yang terlihat
5. **Check kembali** "🕐 SPBU 24 Jam"
6. **Hasil:** Semua marker muncul lagi
### Test Case 4: Toggle Multiple Layers
**Steps:**
1. Di Layers Control, uncheck kedua layer ("🕐 SPBU 24 Jam" dan "⏰ SPBU Limited Hours")
2. **Hasil:** Peta menjadi kosong tanpa marker
3. Check "⏰ SPBU Limited Hours" saja
4. **Hasil:** Hanya markers dari SPBU Limited Hours yang terlihat
5. Check "🕐 SPBU 24 Jam" juga
6. **Hasil:** Semua markers kembali muncul
### Test Case 5: Delete SPBU dari Specific Layer
**Steps:**
1. Pastikan ada markers di kedua layer
2. Klik marker SPBU 24 Jam
3. Popup muncul dengan tombol "Delete"
4. Klik "Delete" dan confirm
5. **Hasil:**
- Marker dihapus dari peta dan layer SPBU 24 Jam
- Marker di layer "SPBU Limited Hours" tetap ada
- Counter di sidebar update
---
## 🎨 Demo Data Koordinat (Indonesia)
### Medan Region
```
SPBU 24 Jam:
- Latitude: 3.1455, Longitude: 101.6969 (Medan Pusat)
- Latitude: 3.1500, Longitude: 101.7000 (Medan Selatan)
SPBU Limited:
- Latitude: 3.1400, Longitude: 101.6900 (Medan Utara)
- Latitude: 3.1350, Longitude: 101.6850 (Medan Barat)
```
### Jakarta Region
```
SPBU 24 Jam:
- Latitude: -6.2088, Longitude: 106.8456 (Jakarta Pusat)
- Latitude: -6.1945, Longitude: 106.8227 (Jakarta Selatan)
SPBU Limited:
- Latitude: -6.2100, Longitude: 106.8300 (Jakarta Utara)
- Latitude: -6.2200, Longitude: 106.8500 (Jakarta Timur)
```
---
## 🔍 Verifying Layer Implementation
### Browser DevTools Check
**Open Console (F12) dan jalankan:**
```javascript
// Check layer groups exist
console.log('SPBU 24 Hours Layer:', spbu24HoursLayer);
console.log('SPBU Limited Hours Layer:', spbuLimitedHoursLayer);
// Check layer control exists
console.log('Layer Control:', layerControl);
// Get markers count in each layer
console.log('24h Markers:', spbu24HoursLayer.getLayers().length);
console.log('Limited Markers:', spbuLimitedHoursLayer.getLayers().length);
// Check all markers structure
console.log('All Markers:', markers);
```
**Expected Output:**
- Kedua layer groups harus terdefinisi
- Layer control harus ada dan bisa di-toggle
- Markers object harus berisi struktur dengan `marker` dan `open_24_hours`
### Network Request Check
1. Buka **Network tab** di DevTools (F12)
2. Tambahkan SPBU baru
3. Lihat requests ke:
- `api/save_point.php` - Response harus `{"success": true, "id": ..., ...}`
- `api/get_points.php` - Response harus berisi array of points
- `api/delete_point.php` - Response harus `{"success": true}`
---
## 🐛 Debugging Tips
### Issue: Layers Control tidak muncul
**Cek:**
```javascript
// Di console, jalankan:
console.log(L.control.layers); // Harus ada function
// Cek HTML untuk div dengan class leaflet-control-layers
document.querySelector('.leaflet-control-layers'); // Harus return element
```
### Issue: Markers tidak masuk ke layer
**Cek:**
```javascript
// Lihat structure markers object
console.log(Object.entries(markers)[0]);
// Should output: [id, {marker: L.Marker, open_24_hours: true/false}]
// Cek marker di layer
spbu24HoursLayer.getLayers().map(m => m.getLatLng());
spbuLimitedHoursLayer.getLayers().map(m => m.getLatLng());
```
### Issue: Delete tidak berfungsi
**Cek:**
1. Open Network tab, delete marker
2. Check response dari `api/delete_point.php` - harus `{"success": true}`
3. Check console untuk error message
4. Pastikan `markers[id]` object punya property `marker` dan `open_24_hours`
---
## 📈 Performance Metrics
### Expected Performance
| Metrik | Value |
|--------|-------|
| Initial Load | < 2 seconds |
| Add Marker | < 500ms |
| Delete Marker | < 300ms |
| Toggle Layer | Instant (< 50ms) |
| Max Markers Smooth | ~1000 per layer |
### Monitor Performance (Console)
```javascript
// Measure add marker time
console.time('addMarker');
// ... add marker code
console.timeEnd('addMarker');
// Measure toggle layer time
console.time('toggleLayer');
// ... toggle layer code
console.timeEnd('toggleLayer');
```
---
## 📝 Common Database Issues
### Issue: Database file not created
**Penyebab:**
- Folder `db/` tidak bisa di-write
- PHP tidak punya permission
**Solusi:**
```bash
# Linux/Mac
chmod -R 755 db/
# Windows - Right click folder > Properties > Security > Edit permissions
# atau jalankan VS Code as Administrator
```
### Issue: "Database connection failed"
**Penyebab:**
- SQLite3 module tidak installed
- Database file corrupted
**Solusi:**
```bash
# Check PHP SQLite support
php -m | grep -i sqlite
# Atau di browser:
# http://localhost:8000/api/config.php
# Harus return JSON, bukan error
```
---
## ✅ Testing Checklist
- [ ] Aplikasi bisa di-akses tanpa error
- [ ] Peta ter-load dengan OpenStreetMap
- [ ] Layers Control muncul di sudut kanan atas
- [ ] Bisa tambah SPBU 24 Jam
- [ ] Bisa tambah SPBU Limited Hours
- [ ] Markers otomatis masuk ke layer yang benar
- [ ] Toggle layer berfungsi (markers hide/show)
- [ ] Delete marker berfungsi dengan benar
- [ ] Marker count di sidebar ter-update
- [ ] Database data persist setelah refresh halaman
- [ ] Responsive design di mobile device
- [ ] Console tidak ada error messages
---
## 🎓 Learning Resources
### Leaflet Documentation
- Layer Groups: https://leafletjs.com/examples/layers-control/
- Layers Control: https://leafletjs.com/reference.html#control-layers
- API Reference: https://leafletjs.com/reference.html
### JavaScript Concepts Digunakan
- Arrow Functions & Template Literals
- Fetch API untuk HTTP requests
- Object destructuring & spreading
- Event listeners & DOM manipulation
- JSON parsing & stringifying
---
## 📞 Troubleshooting Support
Jika mengalami issue:
1. **Check Browser Console** (F12 > Console)
- Catat error message lengkap
- Check Network tab untuk failed requests
2. **Check PHP Error Log**
- Biasanya di: `C:\xampp\apache\logs\error.log`
- Atau check Terminal output jika pakai PHP built-in server
3. **Verify Database**
- SQLite file di: `db/markers.db`
- Bisa di-inspect dengan SQLite Browser tool
4. **Clear Cache**
- Ctrl+Shift+Delete di browser
- Refresh halaman: Ctrl+F5
---
## 🎉 Success Indicators
Jika implementasi Layer Groups berhasil, Anda akan lihat:
✅ Layers Control UI di peta dengan checkbox untuk setiap layer
✅ Markers terbagi ke dalam 2 layer yang berbeda
✅ Checkbox berfungsi untuk show/hide markers berdasarkan tipe
✅ Smooth toggle tanpa lag atau loading
✅ Data persist di database dengan kategori yang benar
Selamat! Layer Groups dan Layers Control sudah siap digunakan! 🚀