Si tu disposes des coordonnées GPS latitude et longitude des deux points, tu peux calculer l'azimut en degrés, et ensuite utiliser une seconde fonction pour obtenir un résultat avec les points cardinaux.
$latuser
et $lnguser
sont la latitude et la longitude du point de départ.
$spot_lat
et $spot_lng
sont la latitude et la longitude du point d'arrivée.
Voici la formule pour calculer l'azimut en degrés avec PHP :
$degres = (rad2deg(atan2(sin(deg2rad($spot_lng) - deg2rad($lnguser)) * cos(deg2rad($spot_lat)), cos(deg2rad($latuser)) * sin(deg2rad($spot_lat)) - sin(deg2rad($latuser)) * cos(deg2rad($spot_lat)) * cos(deg2rad($spot_lng) - deg2rad($lnguser)))) + 360) % 360;
Pour obtenir les points cardinaux tu peux utiliser la fonction suivante :
function getCardinaux($degres) {
$tmp = round($degres/ 22.5);
switch($tmp) {
case 1:
$direction = "NNE";
break;
case 2:
$direction = "NE";
break;
case 3:
$direction = "ENE";
break;
case 4:
$direction = "E";
break;
case 5:
$direction = "ESE";
break;
case 6:
$direction = "SE";
break;
case 7:
$direction = "SSE";
break;
case 8:
$direction = "S";
break;
case 9:
$direction = "SSW";
break;
case 10:
$direction = "SW";
break;
case 11:
$direction = "WSW";
break;
case 12:
$direction = "W";
break;
case 13:
$direction = "WNW";
break;
case 14:
$direction = "NW";
break;
case 15:
$direction = "NNW";
break;
default:
$direction = "N";
}
return $direction;
}