1

我找到了一种从两个坐标计算方向角度的好方法,并且我在 excel 中尝试了该解决方案,当我输入近似坐标时它工作正常。但是,如果我在 java 中实现代码,我会在 dxy(角度)双变量处得到完全不同的结果。坐标很好,我仔细检查了它们。:)

    double lon1 = (double)Math.round(LongitudeDouble * 1000000) / 1000000;
    double lat1 = (double)Math.round(LatitudeDouble * 1000000) / 1000000;

    double lon2 = 19.055954;
    double lat2 = 47.569331;

    ***************************

    double dy = (lat2 - lat1);
    double dx = Math.cos(Math.PI/180*lat1)*(lon2-lon1);

    double dxy = Math.atan2(dy, dx);
    double degree = 180/Math.PI*dxy;
4

1 回答 1

4

excel 偏离您的程序代码的原因是,excell 使用参数 order: x,y 而像 java 这样的编程语言使用 order (y,x)。请参阅atan2的文档。

此外,您和 SO 中的其他一些帖子混淆了数学角度(东 = 0 逆时针升高)和地理方向(罗盘玫瑰):北 = 0,顺时针)。在提供数学角度的角度计算之后,您必须转换为地理方向,但是:

你使用了错误的公式。您的公式适用于笛卡尔坐标(例如屏幕点、像素),不适用于球面(纬度、经度)。在 SO 上搜索两个坐标之间的方位

atan2从 [-pi, pi] 传递一个值。但地理方向是 0-360。

顺便说一句正确答案:

从 lat1,lon1 到 lat,lon2 的方位/航向/航向 = 122.0402

所以这个公式部分是胡说八道:
你的代码给出 -32.04
1。所以你首先交换了 from-pointto-point;从 p1 到 p2 测量一个角度。
2. -90 -32 = -122,这是预期的结果。(数学角度与地理角度)

因此,您正在弄乱自己的数字。您在 Excell 中输入了与 java 不同的数字,或者发布了错误的数字:您的 java 代码中的结果是 -32.04 使用这些数字:

double lon1 = 19.053143;
double lat1 = 47.570518;

double lon2 = 19.055954;
double lat2 = 47.569331;
于 2013-06-24T10:09:20.403 回答