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

时间:2014-03-19 02:43:49

标签: android gps geolocation trigonometry

我试图制作一款可以指向某个位置的应用。您按下按钮并存储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准确度问题,我会看到我的指南针在整个地方跳跃而不是坚决地指向错误方向。

感谢阅读,任何建议或更正都表示赞赏。

1 个答案:

答案 0 :(得分:2)

你的数学都搞砸了,因为经度2度与2度纬度不同。实际上,它对于经度来说甚至不是一个恒定的长度 - 它由极点短路而在赤道处最长。请改用Location.distanceTo函数。