✨ 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:
@@ -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
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user