Skip to content

Instantly share code, notes, and snippets.

@nicordev
Created December 24, 2018 17:05
Show Gist options
  • Save nicordev/86abb85af25f45965a850a22632f6f11 to your computer and use it in GitHub Desktop.
Save nicordev/86abb85af25f45965a850a22632f6f11 to your computer and use it in GitHub Desktop.
Calculate heading between 2 points knowing their longitude and latitude
/**
* Calcul l'azimut entre 2 points de coordonnées géographiques connues
* @param lat1 la latitude du point 1
* @param lng1 la longitude du point 1
* @param lat2 la latitude du point 2
* @param lng2 la longitude du point 2
* @return l'azimut en degrés (en anglais azimuth)
*/
function calculateAzimuth(lat1, lng1, lat2, lng2) {
// Conversions
lat1 = deg2rad(lat1);
lng1 = deg2rad(lng1);
lat2 = deg2rad(lat2);
lng2 = deg2rad(lng2);
function calculateX(lat1, lng1, lat2, lng2) {
return Math.cos(lat1) * Math.sin(lat2) - Math.sin(lat1) * Math.cos(lat2) * Math.cos(lng2 - lng1);
}
function calculateY(lat1, lng1, lat2, lng2) {
return Math.sin(lng2 - lng1) * Math.cos(lat2);
}
// Juste pour être sûr, j'aurais pu utiliser Math.atan2()
function atan2(y, x) {
return 2 * Math.atan(y / (Math.sqrt(x * x + y * y) + x));
}
function convertNegativeAngle(angle) {
return (angle + 360) % 360;
}
var x = calculateX(lat1, lng1, lat2, lng2);
var y = calculateY(lat1, lng1, lat2, lng2);
return convertNegativeAngle(rad2deg(atan2(y, x)));
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment