尝试计算纬度和经度给定距离以及从起点开始的方位

时间:2019-03-09 16:36:41

标签: c# .net gis geospatial latitude-longitude

使用this网站,我试图从初始lat和long以及距离和轴承C#中计算出lat和long,但是我无法使其正常工作。无论方位角和距离如何,输出似乎总是大致垂直于起点垂直于赤道附近。我已经做了网站上所说的,但没有成功。

这是我到目前为止所做的:

    public static double[] LocWithBearingAndDistance(double lat, double lon, double bearing, double distanceM)
    {
        double angdistance = distanceM / 6371000.0;
        double lat2 = Math.Asin(Math.Sin(lat) * Math.Cos(angdistance) + Math.Cos(lat) * Math.Sin(angdistance) * Math.Cos(bearing));
        double lon2 = lon + Math.Atan2(Math.Cos(angdistance) - Math.Sin(lat) * Math.Sin(lat2), Math.Sin(bearing) * Math.Sin(angdistance) * Math.Cos(lat));
        return new double[2] {lat2, (lon2 + 540) % 360 - 180};
    }

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

这是我的代码解决了这个问题:

public static (double Lat, double Lon) Destination((double Lat, double Lon) startPoint, double distance, double bearing)
    {
        double φ1 = startPoint.Lat * (Math.PI / 180);
        double λ1 = startPoint.Lon * (Math.PI / 180);
        double brng = bearing * (Math.PI / 180);
        double φ2 = Math.Asin(Math.Sin(φ1) * Math.Cos(distance / radius) + Math.Cos(φ1) * Math.Sin(distance / radius) * Math.Cos(brng));
        double λ2 = λ1 + Math.Atan2(Math.Sin(brng) * Math.Sin(distance / radius) * Math.Cos(φ1), Math.Cos(distance / radius) - Math.Sin(φ1) * Math.Sin(φ2));
        return (φ2 * (180 / Math.PI), λ2 * (180 / Math.PI));
    }

radius是地球的半径,以米为单位。