Skip to content

Latest commit

Β 

History

14 Commits

Folders and files

NameName
Last commit message
Last commit date
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸ—ΊοΈ SimpleMaps

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


✨ Fitur

  • πŸš— Multi-Moda Transportasi β€” Perhitungan rute khusus untuk car, motorcycle, dan foot dengan 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), dan prefer (prioritaskan gang/jalan sempit untuk memotong jarak).
  • ⛰️ Profil Elevasi & Tanjakan Curam β€” Analisis total tanjakan (ascent), turunan (descent), deteksi kemiringan β‰₯ 8%, plus filter avoid_steep_slopes untuk 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.

🧱 Arsitektur

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.

Tech Stack

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

πŸ“¦ Persyaratan

  • PHP β‰₯ 7.4 (dengan ekstensi curl dan json)
  • Composer (hanya untuk menjalankan test PHPUnit)
  • Koneksi internet (untuk OSRM / Nominatim; mode simulasi tetap berjalan offline)

πŸš€ Instalasi

1. Clone & Install Dependensi

git clone https://github.com/username/simplemaps.git
cd simplemaps

# Install dependensi dev (PHPUnit) β€” opsional jika hanya menjalankan aplikasi
composer install

2. Konfigurasi Environment

cp .env.example .env

Buka .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=6800

3. Jalankan Aplikasi

Opsi A β€” PHP Built-in Server (cara tercepat)

cd public
php -S localhost:8000

Buka 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.

πŸ”Œ Dokumentasi API

Endpoint

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

Contoh Request β€” Kalkulasi Rute

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 Request

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

Contoh Response (ringkas)

{
  "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
    }
  }
}

πŸ—‚οΈ Struktur Proyek

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

πŸ§ͺ Testing

# Opsi 1 β€” PHPUnit (perlu composer install)
vendor/bin/phpunit

# Opsi 2 β€” Test runner mandiri tanpa dependensi
APP_ENV=testing php tests/run_tests.php

Test mencakup validasi koordinat, profil elevasi, model konsumsi BBM, analisis kemacetan, simulator routing, dan integrasi kalkulasi rute.

πŸ›£οΈ Roadmap

  • 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

πŸ“š Referensi

πŸ“„ Lisensi

Distributed under the MIT License.

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages