如何从两个GPS坐标计算方向的角度

时间:2013-06-22 17:10:56

标签: java gps coordinates

我找到了一种从两个坐标计算方向角度的好方法,我在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;

1 个答案:

答案 0 :(得分:4)

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

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

你使用了错误的公式。您的公式适用于笛卡尔坐标(例如屏幕点,像素),而不适用于球形(纬度,长度)。在这里搜索在两个坐标之间承载

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

正确的答案:

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

所以这个公式部分是无稽之谈:
您的代码为-32.04
1.所以你先交换从点到点;从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;