public static double Bearing(
double lat1, double lon1,
double lat2, double lon2)
{
//const double R = 6371; //earth’s radius (mean radius = 6,371km)
var dLon = ToRad(lon2 - lon1);
var dPhi = Math.Log(
Math.Tan(ToRad(lat2)/2 + Math.PI/4)/Math.Tan(ToRad(lat1)/2 + Math.PI/4));
if (Math.Abs(dLon) > Math.PI)
dLon = dLon > 0 ? -(2*Math.PI - dLon) : (2*Math.PI + dLon);
return Math.Atan2(dLon, dPhi);
}