Направление между двумя точками широты и долготы в C # - PullRequest
12 голосов
/ 11 января 2010

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

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

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

In C #

Ответы [ 2 ]

21 голосов
/ 11 января 2010

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

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

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);
7 голосов
/ 11 января 2010

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

...