Navigasi Rute Cerdas Multi-Moda & Estimasi BBM
Aplikasi navigasi dan kalkulasi rute berbasis PHP yang membandingkan rute tercepat vs paling hemat bahan bakar, mendukung moda Mobil, Motor, dan Jalan Kaki, dengan opsi jalan tikus (alley), filter tanjakan curam, serta analisis kemacetan berbasis waktu.
Fitur β’ Arsitektur β’ Instalasi β’ Dokumentasi API β’ Struktur Proyek β’ Testing
- π Multi-Moda Transportasi β Perhitungan rute khusus untuk
car,motorcycle, danfootdengan kalibrasi kecepatan & konsumsi masing-masing moda. - β‘ Perbandingan Rute Cerdas β Selalu menghasilkan 3 alternatif: Rute Tercepat, Rute Paling Hemat BBM, dan Rute Alternatif Jalan Tikus, lengkap dengan ringkasan selisih waktu & penghematan Rupiah.
- π£οΈ Preferensi Jalan Tikus (Alley) β Opsi
avoid(hindari),allow(izinkan), danprefer(prioritaskan gang/jalan sempit untuk memotong jarak). - β°οΈ Profil Elevasi & Tanjakan Curam β Analisis total tanjakan (ascent), turunan (descent), deteksi kemiringan β₯ 8%, plus filter
avoid_steep_slopesuntuk jalur yang lebih landai. - β½ Estimasi Konsumsi & Biaya BBM β Model perhitungan multi-faktor (jarak, elevasi, stop-and-go, kemacetan) dengan harga BBM Rupiah (Pertalite, Pertamax, Solar) dan dukungan fuel rate kustom.
- π¦ Analisis Kemacetan Berbasis Waktu β Pemodelan jam sibuk (
morning_rush,evening_rush,off_peak) yang menyesuaikan durasi tempuh dan penalti idling bahan bakar per moda. - π§ Navigasi Turn-by-Turn β Instruksi belokan detail dalam Bahasa Indonesia ("Belok kiri ke Jl. Sudirman sejauh 300 m").
- π Geocoding Autocomplete β Pencarian alamat/tempat via OpenStreetMap Nominatim (prioritas Indonesia) dengan fallback landmark populer offline.
- ποΈ Arsitektur Hybrid Berlapis β OSRM publik (default, tanpa API key) β OpenRouteService (opsional) β Simulator internal offline.
SimpleMaps menggunakan strategi hybrid berlapis 3-tier untuk menjamin rute selalu tersedia (ADR-0002):
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Frontend (index.html) β
β Leaflet Map β’ Tailwind CSS β’ Chart.js (Elevation) β
ββββββββββββββββββββββββββββββββ¬ββββββββββββββββββββββββββββββββββ
β REST JSON
ββββββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββ
β PHP Router (public/index.php) β
β /api/geocoding/search /api/routes/calculate β
ββββββββββββββββββββββββββββββββ¬ββββββββββββββββββββββββββββββββββ
β
ββββββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββ
β RoutingService (Hybrid) β
β β
β Tier 1: OpenRouteService (jika OPENROUTESERVICE_API_KEY ada) β
β Tier 2: OSRM Public API (default, gratis, tanpa token) ββββββ Default β
β Tier 3: RoutingSimulator (fallback offline) β
β β
β βββ ElevationService βββ profil tanjakan/turunan β
β βββ FuelCalculationService βββ estimasi liter & biaya (Rp) β
β βββ TrafficService βββ model kemacetan berbasis waktu β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Cara kerja fallback chain: Jika provider prioritas gagal (timeout, error, atau tidak ada API key), sistem otomatis turun ke provider berikutnya sehingga kalkulasi rute tidak pernah terputus.
| Komponen | Teknologi |
|---|---|
| Backend | PHP β₯ 7.4 (native, tanpa framework) |
| Routing | OSRM Public API β’ OpenRouteService API |
| Geocoding | OpenStreetMap Nominatim |
| Frontend | Tailwind CSS β’ Leaflet.js β’ Chart.js β’ Font Awesome |
| Testing | PHPUnit 9.5 / 10 |
- PHP β₯ 7.4 (dengan ekstensi
curldanjson) - Composer (hanya untuk menjalankan test PHPUnit)
- Koneksi internet (untuk OSRM / Nominatim; mode simulasi tetap berjalan offline)
git clone https://github.com/username/simplemaps.git
cd simplemaps
# Install dependensi dev (PHPUnit) β opsional jika hanya menjalankan aplikasi
composer installcp .env.example .envBuka .env dan sesuaikan sesuai kebutuhan:
APP_ENV=local
APP_DEBUG=true
APP_URL=http://localhost/simplemaps
# Isi jika ingin memakai OpenRouteService (opsional β biarkan kosong untuk memakai OSRM gratis)
OPENROUTESERVICE_API_KEY=
# Efisiensi kendaraan default (km/liter)
DEFAULT_CAR_FUEL_RATE=12.0
DEFAULT_MOTORCYCLE_FUEL_RATE=45.0
# Harga BBM default (Rp/liter)
FUEL_PRICE_PERTALITE=10000
FUEL_PRICE_PERTAMAX=12950
FUEL_PRICE_SOLAR=6800Opsi A β PHP Built-in Server (cara tercepat)
cd public
php -S localhost:8000Buka http://localhost:8000 di browser.
Opsi B β Laragon / XAMPP / Apache
Letakkan project di www/ (Laragon) atau htdocs/ (XAMPP), lalu buka http://localhost/simplemaps. Rewrite .htaccess sudah disertakan di public/.
Catatan virtual host: pastikan DocumentRoot mengarah ke folder
public/agar routing API bekerja dengan benar.
| Metode | Endpoint | Deskripsi |
|---|---|---|
GET |
/api/health |
Status kesehatan aplikasi |
GET |
/api/geocoding/search?q=... |
Pencarian alamat / autocomplete |
POST |
/api/routes/calculate |
Kalkulasi rute & estimasi BBM |
curl -X POST http://localhost:8000/api/routes/calculate \
-H "Content-Type: application/json" \
-d '{
"origin": { "latitude": -6.200000, "longitude": 106.816666 },
"destination": { "latitude": -6.175392, "longitude": 106.827153 },
"waypoints": [],
"mode": "motorcycle",
"alley_preference": "prefer",
"avoid_steep_slopes": true,
"departure_time": "evening_rush",
"fuel_type": "pertalite",
"fuel_price": 10000,
"base_fuel_rate": 45
}'| Parameter | Tipe | Default | Deskripsi |
|---|---|---|---|
origin |
object |
wajib | { latitude, longitude } |
destination |
object |
wajib | { latitude, longitude } |
waypoints |
array |
[] |
Titik perantara opsional |
mode |
string |
car |
car β’ motorcycle β’ foot |
alley_preference |
string |
avoid |
avoid β’ allow β’ prefer |
avoid_steep_slopes |
boolean |
false |
Hindari tanjakan curam (β₯ 8%) |
departure_time |
string |
now |
now β’ morning_rush β’ evening_rush β’ off_peak β’ midday β’ "HH:MM" |
fuel_type |
string |
pertalite |
pertalite β’ pertamax β’ solar |
fuel_price |
number |
default konfig | Harga per liter (Rp), null = pakai default |
base_fuel_rate |
number |
default moda | Efisiensi kendaraan (km/L), null = pakai default |
{
"message": "Kalkulasi rute berhasil diselesaikan",
"data": {
"mode": "motorcycle",
"routes_count": 3,
"routes": [
{
"id": "osrm_0_...",
"type": "fastest",
"title": "Rute Tercepat (Jalan Utama)",
"distance_meters": 8420.5,
"duration_seconds": 798,
"traffic": { "traffic_level": "Macet Padat", "delay_formatted": "+12 mnt" },
"elevation_profile": { "total_ascent_m": 42, "steep_slopes_count": 1 },
"fuel_calculation": {
"total_liters": 0.41,
"total_cost_idr": 4100,
"base_fuel_rate": 45.0
},
"steps": [
{ "instruction": "Belok kiri ke Jl. Sudirman", "distance_m": 300, "duration_s": 28 }
]
}
],
"comparison": {
"recommended_route_id": "osrm_0_...",
"fuel_savings_liters": 0.12,
"fuel_savings_idr": 1200,
"fuel_savings_formatted": "Rp 1.200",
"extra_time_minutes": 4.5
}
}
}simplemaps/
βββ public/ # Web root
β βββ index.php # Entry point & router API
β βββ index.html # Frontend (Leaflet + Tailwind + Chart.js)
β βββ .htaccess # Rewrite rules (Apache)
βββ src/
β βββ Controllers/
β β βββ RouteCalculationController.php
β β βββ GeocodingController.php
β βββ Services/ # Logika bisnis
β β βββ RoutingService.php # Orchestrator hybrid 3-tier
β β βββ RoutingSimulator.php # Fallback offline
β β βββ FuelCalculationService.php # Model konsumsi BBM
β β βββ ElevationService.php # Profil elevasi
β β βββ TrafficService.php # Model kemacetan
β β βββ GeocodingService.php # Nominatim + fallback
β βββ Models/
β β βββ Coordinates.php
β β βββ RouteAlternative.php
β β βββ RouteStep.php
β β βββ Maneuver.php
β β βββ ElevationProfile.php
β β βββ FuelCalculationResult.php
β βββ Utils/
β βββ Router.php # Micro HTTP router
β βββ Response.php # JSON response helper
β βββ Env.php # .env loader
β βββ GeoMath.php # Perhitungan spasial
βββ config/config.php # Konfigurasi global
βββ tests/ # Unit & Integration tests
βββ docs/
β βββ adr/ # Architecture Decision Records
β βββ agents/ # Panduan untuk AI agents
βββ .env.example
βββ composer.json
βββ CONTEXT.md # Glosarium domain
# Opsi 1 β PHPUnit (perlu composer install)
vendor/bin/phpunit
# Opsi 2 β Test runner mandiri tanpa dependensi
APP_ENV=testing php tests/run_tests.phpTest mencakup validasi koordinat, profil elevasi, model konsumsi BBM, analisis kemacetan, simulator routing, dan integrasi kalkulasi rute.
- Routing Cache Layer β cache respons OSRM/ORS (Redis/SQLite) untuk rute populer (ADR-0002)
- Self-Hosted OSRM β instance Docker OSRM lokal dengan PBF Indonesia
- Filter Jalan Tol (Tollways) β saklar rute non-tol di antarmuka web
- Data Elevasi SRTM β elevasi satelit riil via OpenRouteService
- CHANGELOG.md β Riwayat perubahan versi
- CONTEXT.md β Glosarium & terminologi domain
- docs/adr/0001-routing-engine-and-fuel-efficiency-model.md β Model mesin routing & efisiensi BBM
- docs/adr/0002-hybrid-routing-architecture-osrm-and-openrouteservice.md β Arsitektur routing hybrid
Distributed under the MIT License.