par

Bonjour,
Sur cette page, vous répondez à la question :

Comment calculer la distance entre deux points GPS latitude et longitude en JavaScript ?

https://www.1formatik.com/2417/comment-calculer-distance-latitude-longitude-javascript

A cette formule, je souhaiterais pouvoir calculer un cap à suivre entre ces 2 points.
Le calcul du cap est différent en fonction de l'éloignement de ces 2 points, car la terre est ronde ! Mais je souhaiterais pouvoir très simplement calculer ce cap sur 2 points qui ne seront pas éloignés de plus de 100km l'un de l'autre (donc en projection plate).

1 Réponse

+1 validé
par

Bonjour, en me basant sur l'une de mes précédentes réponses qui concernait le calcul d'un Azimut en PHP, j'ai adapté les fonctions et la formule à JavaScript.

Dans l'exemple ci-dessous on calcule donc le cap entre Paris et Marseille, et ce en utilisant uniquement JavaScript.

<script>
function radians_to_degrees(radians)
{
  var pi = Math.PI;
  return radians * (180/pi);
}

function degrees_to_radians(degrees)
{
  var pi = Math.PI;
  return degrees * (pi/180);
}

function getCardinaux(degrees) {
   var tmp = Math.round(degrees/ 22.5);
   switch(tmp) {
      case 1:
         var direction = "NNE";
         break;
      case 2:
         var direction = "NE";
         break;
      case 3:
         var direction = "ENE";
         break;
      case 4:
         var direction = "E";
         break;
      case 5:
         var direction = "ESE";
         break;
      case 6:
         var direction = "SE";
         break;
      case 7:
         var direction = "SSE";
         break;
      case 8:
         var direction = "S";
         break;
      case 9:
         var direction = "SSW";
         break;
      case 10:
         var direction = "SW";
         break;
      case 11:
         var direction = "WSW";
         break;
      case 12:
         var direction = "W";
         break;
      case 13:
         var direction = "WNW";
         break;
      case 14:
         var direction = "NW";
         break;
      case 15:
         var direction = "NNW";
         break;
      default:
         var direction = "N";
   }
   return direction;
}

var lat_depart = 48.864716;
var lng_depart = 2.349014;
var lat_arrivee = 43.296398;
var lng_arrivee = 5.370000;			
var degres = (radians_to_degrees(Math.atan2(Math.sin(degrees_to_radians(lng_arrivee) - degrees_to_radians(lng_depart)) * Math.cos(degrees_to_radians(lat_arrivee)), Math.cos(degrees_to_radians(lat_depart)) * Math.sin(degrees_to_radians(lat_arrivee)) - Math.sin(degrees_to_radians(lat_depart)) * Math.cos(degrees_to_radians(lat_arrivee)) * Math.cos(degrees_to_radians(lng_arrivee) - degrees_to_radians(lng_depart)))) + 360) % 360;		
var degres = Math.ceil(degres * 100) / 100;

alert("Cap " + degres + " " + getCardinaux(degres));
</script>

Offre Sponsorisée

Ailleurs sur le Web

Lecture Recommandée

Edward Snowden - Mémoires vives

"Je m'appelle Edward Joseph Snowden. Avant, je travaillais pour le gouvernement mais aujourd'hui je suis au service de tous. Il m'a fallu près de trente ans pour saisir la différence et quand j'ai compris, ça m'a valu quelques ennuis au bureau."

L'homme qui a tout risqué pour dénoncer la surveillance globale, ou l'extraordinaire histoire d'un garçon brillant qui a grandi "en ligne", d'un homme devenu espion, puis lanceur d'alerte, et, en exil, la consciencce de l'internet.

Mémoires vives est un témoignage exceptionnel, également disponible en numérique.

Sujets Connexes

Merci pour votre visite sur 1FORMATIK.com

Un petit clic sur la pub est toujours apprécié, c'est elle qui finance le site

Bon surf

...