feat(ReserverController): Calcule l'itinéraire et affiche sur une carte

Ajoute le calcul de l'itinéraire via l'API Geoplateforme et affiche le résultat sur une carte Leaflet. Met à jour la CSP.
This commit is contained in:
Serreau Jovann
2026-02-04 12:35:53 +01:00
parent 900b55c07b
commit c837095cc3
6 changed files with 241 additions and 13 deletions

View File

@@ -1168,18 +1168,22 @@ class ReserverController extends AbstractController
$startLat = 49.849;
$startLon = 3.286;
// Formule de Haversine
$earthRadius = 6371; // km
// Calcul itinéraire via API Geoplateforme
$itineraireResponse = $client->request('GET', 'https://data.geopf.fr/navigation/itineraire', [
'query' => [
'resource' => 'bdtopo-osrm',
'start' => $startLon . ',' . $startLat,
'end' => $lon . ',' . $lat,
'profile' => 'car',
'optimization' => 'fastest',
'distanceUnit' => 'kilometer',
'geometryFormat' => 'geojson'
]
]);
$dLat = deg2rad($lat - $startLat);
$dLon = deg2rad($lon - $startLon);
$a = sin($dLat / 2) * sin($dLat / 2) +
cos(deg2rad($startLat)) * cos(deg2rad($lat)) *
sin($dLon / 2) * sin($dLon / 2);
$c = 2 * atan2(sqrt($a), sqrt(1 - $a));
$distance = $earthRadius * $c;
$itineraire = $itineraireResponse->toArray();
$distance = $itineraire['distance'];
$geometry = $itineraire['geometry'] ?? null;
$rate = 0.50;
$trips = 4;
@@ -1209,7 +1213,8 @@ class ReserverController extends AbstractController
return $this->render('revervation/estimate_delivery.twig', [
'form' => $form->createView(),
'estimation' => $estimation,
'details' => $details ?? null
'details' => $details ?? null,
'geometry' => $geometry ?? null
]);
}
}