如何根据与一点的距离计算新的纬度

本文关键字:一点 距离 计算 纬度 何根 | 更新日期: 2023-09-27 17:58:38

我正试图根据与某个点的距离(以米为单位)来计算该点的新纬度。

我在这里和其他地方找到了一些有用的帖子,但我仍然有一些小麻烦。

这是我目前掌握的代码:

        public LatLon CalculateNewCoords(decimal startingLat, decimal startingLon, int distanceEast, int distanceNorth)
    {
        int r = 6378137;
        decimal dLat = Convert.ToDecimal(distanceNorth) / Convert.ToDecimal(r);
        decimal pi = Convert.ToDecimal(Math.PI);
        double cosInput = Convert.ToDouble(pi * startingLat / Convert.ToDecimal(180));
        decimal dLon = Convert.ToDecimal(distanceEast) / Convert.ToDecimal(Convert.ToDouble(r) * Math.Cos(cosInput));
        decimal lat0 = startingLat + dLat * (180 * pi);
        decimal lon0 = startingLon + dLon * (180 / pi);     
        LatLon output = new LatLon();
        output.Latitude = lat0;
        output.Longitude = lon0;
        return output;
    }

经度看起来是正确的,但纬度显示得很明显。

我使用它如下:

CalculateNewCoords(Convert.ToDecimal(40.743461), Convert.ToDecimal(-74.175847), 0, 1000);

有人能指出我做错了什么吗?

如何根据与一点的距离计算新的纬度

错误在第一行:

    decimal lat0 = startingLat + dLat * (180 * pi);
    decimal lon0 = startingLon + dLon * (180 / pi);     

这肯定是不正确的,两条线必须使用相同的弧度进行度数转换。在第2行中替换为180/pi。
如果是十进制,请进一步考虑使用double。