Created
December 24, 2018 17:05
-
-
Save nicordev/86abb85af25f45965a850a22632f6f11 to your computer and use it in GitHub Desktop.
Calculate heading between 2 points knowing their longitude and latitude
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* 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