Android,使用gps和指南针指向坐标

Android,使用gps和指南针指向坐标,android,gps,geolocation,trigonometry,Android,Gps,Geolocation,Trigonometry,我正在尝试制作一个应用程序,为你指出一个位置。你按下一个按钮,它会存储gps坐标,然后计算距离和你需要面对的角度。然后,通过屏幕上的指南针图形“指向”它,它会引导您回到记忆中的位置 至少应该是这样。在把代码弄乱了几个小时之后,我得出了一个结论,那就是由于我在过去几年中缺乏trig实践,在某个地方出现了一个逻辑错误 罗盘和GPS位置更新相当频繁。这是我的主要更新调用中的代码,用于旋转指南针并显示距离的用户界面 public void updateUI(){ double deltaX =

我正在尝试制作一个应用程序,为你指出一个位置。你按下一个按钮,它会存储gps坐标,然后计算距离和你需要面对的角度。然后,通过屏幕上的指南针图形“指向”它,它会引导您回到记忆中的位置

至少应该是这样。在把代码弄乱了几个小时之后,我得出了一个结论,那就是由于我在过去几年中缺乏trig实践,在某个地方出现了一个逻辑错误

罗盘和GPS位置更新相当频繁。这是我的主要更新调用中的代码,用于旋转指南针并显示距离的用户界面

public void updateUI(){
    double deltaX = targetLongitude - currentLongitude;
    double deltaY = targetLatitude - currentLatitude;
    double distance = Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY, 2));
    double rotation = Math.toDegrees(Math.atan2(deltaX,deltaY));
    distanceTextView.setText(Double.toString(distance));
    rotateCompass(rotation - degreesClockwiseFromNorth);
}
以及rotateCompass的代码:

public void rotateCompass(double degrees){
    degrees -= currentRotation; //calculates necessary rotation across updates
    currentRotation += degrees;

    matrix.postRotate(
        (float) degrees, 
        compass.getDrawable().getBounds().width() / 2,
        compass.getDrawable().getBounds().height() / 2);

    compass.setImageMatrix(matrix);
}
我几乎可以肯定我的旋转代码是有效的,因为当我替换

rotateCompass(rotation - degreesClockwiseFromNorth);

无论我面对的方向如何,它都指向一个真正的指南针的正北方。但当我使用前者时,它指向一个一致的点,但该点似乎离目标点很远。 所以我得出的结论是,我的错误要么是在计算正确的角度,要么是期望gps太精确。我还没有测试过比我在后院能测得更远的距离,但我假设如果是gps精度问题,我会看到我的指南针到处乱跳,而不是坚定地指向错误的方向


感谢阅读,任何建议或更正都将不胜感激。

由于2度经度之间的距离与2度纬度之间的距离不同,因此您的数学计算完全错误。事实上,它甚至不是经度的恒定长度——它被两极缩短,赤道最长。改用Location.distance to函数。

你是认真的吗?我甚至没有想到会是这样。在讨论这个问题之前,我应该做更多的研究(或者更合乎逻辑地思考)。我将尝试一下。再次查看Location对象,我看到distanceBetween函数也将返回方向角。这应该可以解决你所有的计算问题,你是对的。我觉得自己是个失败者,因为我没有先阅读文档。哈哈,再次谢谢你。
rotateCompass(0 - degreesClockwiseFromNorth);