我想做一个应用程序,指向你的位置。你按下一个按钮,它会存储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度纬度之间的距离不一样。事实上,经度甚至不是一个恒定的长度——它在两极处较短,在赤道处最长。使用位置。