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

时间:2013-02-10 14:29:06

标签: c# map latitude-longitude

我试图根据距离该点数米的距离计算一个新的纬度。

我在这里和其他地方发现了一些有帮助的帖子,但我仍然有点麻烦。

这是我到目前为止所获得的代码:

        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);

有人可以指出我做错了吗?

1 个答案:

答案 0 :(得分:0)

错误在第一行:

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

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