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



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

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

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

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

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;

最新更新