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

标签 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;

最佳答案

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

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

您使用了错误的公式。您的公式适用于笛卡尔坐标(例如屏幕点、像素),不适用于球面坐标(纬度、经度)。在 SO 上搜索 bearing between two coordinates

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

顺便说一下正确答案:

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

所以这个公式部分是废话:
您的代码给出 -32.04
1. 所以你首先交换了起点终点;从 p1 到 p2 测量角度。
2. -90 -32 = -122 这是预期的结果。 (数学角度与地理角度)

所以你弄乱了自己的数字。你在 Excel 中输入了另一个数字,而不是在 java 中, 或发布了错误的号码:您的 Java 代码中的结果是 -32.04 使用这些数字:

double lon1 = 19.053143;
double lat1 = 47.570518;

double lon2 = 19.055954;
double lat2 = 47.569331;

关于java - 如何从两个GPS坐标计算方向的角度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17253262/

相关文章:

java - 让Struts为不同的角色显示不同的JSP

java - 如何定义方法返回 this 的结构类型

Android:GPS 时间戳与 SensorEvent 时间戳

r - 从 x 和 y 以米为单位猜测坐标系,并近似对应的 long 和 lat

javascript - 如何在两个 y 坐标之间缓和?

java - 什么是好的 "Error Checking"模式(Java)?

java - 为什么 ProcessBuilder 类不重写 equals()?

Android:如何防止 GPS 自动禁用

android - 如何获取用户指向的 GPS 坐标?

android - 如何从 imageView Android 中获取位图的真实坐标(X,Y)