安卓系统,使用gps和指南针指向坐标



我想做一个应用程序,指向你的位置。你按下一个按钮,它会存储gps坐标,然后计算距离和你需要面对的角度。然后,它会用屏幕上的指南针图形"指向"你记得的位置。

至少,它应该是。在摆弄了几个小时的代码之后,我得出的结论是,由于我过去几年缺乏三角练习,在某个地方出现了逻辑错误。

罗盘和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);

rotateCompass(0 - degreesClockwiseFromNorth);

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

感谢您的阅读,如有任何建议或更正,我们将不胜感激。

你的数学全搞砸了,因为2度经度之间的距离和2度纬度之间的距离不一样。事实上,经度甚至不是一个恒定的长度——它在两极处较短,在赤道处最长。使用位置。

最新更新