如何使用安卓指南针从当前位置计算角度到(Kabba)麦加

时间:2014-04-16 11:45:18

标签: android

如何使用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);

2 个答案:

答案 0 :(得分:2)

尝试实现这一点,希望它会有所帮助:

double angle = Math.atan2(dlat, dlon); // in radians

这是假设您的箭头默认指向水平轴(正东方向)。您可能需要根据箭头绘制指向的任何方向进行调整。例如,如果它指向一个恒定的90度关闭,只需旋转一个额外的0.5 * PI rad来对齐它。

for more info please read this

答案 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)