Este sitio tiene el algoritmo básico:
// in javascript, not hard to translate...
var y = Math.sin(dLon) * Math.cos(lat2);
var x = Math.cos(lat1)*Math.sin(lat2) -
Math.sin(lat1)*Math.cos(lat2)*Math.cos(dLon);
var brng = Math.atan2(y, x).toDeg();
ACTUALIZADO: Ver aquí por completo algorith Mapeo de Matemáticas y Javascript
Eso te dará un número entre 0 y 360 entonces es sólo una cuestión de tener una búsqueda simple:
var bearings = ["NE", "E", "SE", "S", "SW", "W", "NW", "N"];
var index = brng - 22.5;
if (index < 0)
index += 360;
index = parseInt(index / 45);
return(bearings[index]);
Es importante tener en cuenta que su rodamiento realidad cambia a medida que se mueve alrededor de la Tierra. El algoritmo anterior muestra inicial de rodamiento, pero si va a viajar una larga distancia, el rodamiento sea significativamente diferente cuando se llega al destino (si sólo va a viajar una distancia corta [<unos pocos cientos de kilómetros], entonces probablemente lo ganó 't cambiar lo suficiente como para ser una preocupación).