Направление между 2 точками широты и долготы в C#


У меня есть 2 координаты в формате Lat Long.

Как определить из точки A (например,Нью-Йорк 37.149472, -95.509544 ) направление в градусах к точке B (например,Торонто 40.714269, -74.005973)

Я ищу значение типа "340 градусов"

В C#

2 11

2 ответа:

Если вы хотите, чтобы следовал постоянный пеленг, вам не нужен кратчайший путь (большой круг), вам нужна линия Румба

Преобразование скриптов подвижного типа для этого

static double DegreeBearing(
    double lat1, double lon1, 
    double lat2, double lon2)
{   
    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 ToBearing(Math.Atan2(dLon, dPhi));
}

public static double ToRad(double degrees)
{
    return degrees * (Math.PI / 180);
}

public static double ToDegrees(double radians)
{
    return radians * 180 / Math.PI;
}

public static double ToBearing(double radians) 
{  
    // convert radians to degrees (as bearing: 0...360)
    return (ToDegrees(radians) +360) % 360;
}

// verify against the website example
DegreeBearing(50.36389,-4.15694,42.35111,-71.04083);

Если вы посмотрите на http://www.movable-type.co.uk/scripts/latlong.html в нем есть javascript, который можно переписать на c#.