我有一个应用程序我想做一些自定义指南针功能假设我有位置A和位置B我标记我的位置(位置A)然后我移动到一定距离我的指南针应指向位置A我可以移动的地方我正在引用qiblacompass功能,但当我移动到其他位置时它不指向位置A是我的代码
public static double getDirectionFromNorth(double degLatitude,
double degLongitude) {
final double direction_LATITUDE = Math.toRadians(angle_lat);
double direction_LONGITUDE = Math.toRadians(angle_lng);
double latitude2 = Math.toRadians(degLatitude);
double longitude = Math.toRadians(degLongitude);
double soorat = Math.sin(direction_LONGITUDE - longitude);
double makhraj = Math.cos(latitude2) * Math.tan(direction_LATITUDE)
- Math.sin(latitude2) * Math.cos(direction_LONGITUDE - longitude);
double returnValue = Math.toDegrees(Math.atan(soorat / makhraj));
if (latitude2 > direction_LATITUDE) {
if ((longitude > direction_LONGITUDE || longitude < (Math
.toRadians(-180d) + direction_LONGITUDE))
&& (returnValue > 0 && returnValue <= 90)) {
returnValue += 180;
} else if (!(longitude > direction_LONGITUDE || longitude < (Math
.toRadians(-180d) + direction_LONGITUDE))
&& (returnValue > -90 && returnValue < 0)) {
returnValue += 180;
}
}
if (latitude2 < direction_LATITUDE) {
if ((longitude > direction_LONGITUDE || longitude < (Math
.toRadians(-180d) + direction_LONGITUDE))
&& (returnValue > 0 && returnValue < 90)) {
returnValue += 180;
}
if (!(longitude > direction_LONGITUDE || longitude < (Math
.toRadians(-180d) + direction_LONGITUDE))
&& (returnValue > -90 && returnValue <= 0)) {
returnValue += 180;
}
}
// ***
return returnValue;
}
其中angle_lat和angle_lng是我的位置纬度,经度和degLatitude,degLongitude是当我移动它从我的GPS获取lat,lng时
任何人都请告诉我这段代码中的错误或我实现任务的其他方法是什么?
答案 0 :(得分:0)
使用此网页检查您的代码: http://www.movable-type.co.uk/scripts/latlong.html
然后当你知道正确计算两个lat,long之间的方向时 你会发现这对行走速度来说还不够。
只需驾驶汽车或火车,远高于10公里/小时,您的算法概率就可以了。 为了计算行人步行方向,你需要一个更先进的算法,考虑过去的更多位置,例如30米。
但是作为第一次拍摄,为什么不按照Location属性提供的方向: 它被称为标题或课程。考虑到这一点,两个纬度/经度之间的方向更加精确。 (因为GPS芯片内部,有更多的信息可用)