float, 'duration_min' => float] or null on failure. */ function getOsrmRouteDetails($startLat, $startLng, $endLat, $endLng, $countryCode = 'JO') { // Intaleq Maps SaaS server handles all countries (Jordan, Syria, Egypt) $baseUrl = "https://map-saas.intaleqapp.com/api/maps/route"; $queryParams = http_build_query([ 'fromLat' => $startLat, 'fromLng' => $startLng, 'toLat' => $endLat, 'toLng' => $endLng ]); $url = "{$baseUrl}?{$queryParams}"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_TIMEOUT, 5); // 5 seconds timeout // Add Intaleq API Key Header curl_setopt($ch, CURLOPT_HTTPHEADER, [ "x-api-key: in_9478b32836d19cff73db3063" ]); $response = curl_exec($ch); $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); if ($httpCode === 200 && $response) { $data = json_decode($response, true); if (isset($data['distance']) && isset($data['duration'])) { $distanceMeters = (float)$data['distance']; $durationSeconds = isset($data['trafficAwareDuration']) ? (float)$data['trafficAwareDuration'] : (float)$data['duration']; return [ 'distance_km' => round($distanceMeters / 1000, 2), 'duration_min' => round($durationSeconds / 60, 2) ]; } } return null; }