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