如何使用android指南针从当前位置计算到(Kabba)Mecca的角度。我正在使用以下代码,但它没有提供正确的角度
Location currentLoc = MYGPS.getLocation(DirectionActivity.this);
currentLat = currentLoc.getLatitude();
currentLng = currentLoc.getLongitude();
Location KaabaLoc = new Location("GPS");
KaabaLoc.setLatitude(KaabaLat);
KaabaLoc.setLongitude(KaabaLng);
private float bearing = KaabaLoc.bearingTo(currentLoc)%(float)(2*Math.PI);
答案 0 :(得分:2)
尝试实现这一点,希望它会有所帮助:
double angle = Math.atan2(dlat, dlon); // in radians
这是假设您的箭头默认指向水平轴(正东方向)。您可能需要根据箭头绘制指向的任何方向进行调整。例如,如果它指向一个恒定的90度关闭,只需旋转一个额外的0.5 * PI rad来对齐它。
答案 1 :(得分:0)
上课
class GreatCircleBearing{
static public double initial (double lat1, double long1, double lat2, double long2)
{
return (_bearing(lat1, long1, lat2, long2) + 360.0) % 360;
}
static public double final1(double lat1, double long1, double lat2, double long2)
{
return (_bearing(lat2, long2, lat1, long1) + 180.0) % 360;
}
static private double _bearing(double lat1, double long1, double lat2, double long2)
{
final double degToRad = Math.PI / 180.0;
double phi1 = lat1 * degToRad;
double phi2 = lat2 * degToRad;
double lam1 = long1 * degToRad;
double lam2 = long2 * degToRad;
return Math.atan2(Math.sin(lam2-lam1)*Math.cos(phi2),
Math.cos(phi1)*Math.sin(phi2) - Math.sin(phi1)*Math.cos(phi2)*Math.cos(lam2-lam1)
) * 180/Math.PI;
}
}
然后使用源和目标位置点进行调用。它将返回所需的角度
GreatCircleBearing.initial(latitude1, longitude1, KaabaLat, KaabaLng)