Comment calculer un azimut en PHP ?
Réponses rédigées par Antoine
Dernière mise à jour : 2018-09-05 16:26:07
Question
Comment calculer l'azimut entre deux coordonnées GPS, c'est à dire les degrés entre deux latitudes et longitudes, avec PHP ?
Réponse
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;
}