Comment calculer un azimut en PHP ?

Réponses rédigées par Antoine
Dernière mise à jour : 2018-09-05 16:26:07
Thèmes : php - script - webmaster
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;
}