如何在不启用指南针的情况下计算getOrientation()



我有一个带有ImageView的MapView,它带有指向特定位置的箭头。我通过旋转ImageView来进行指向,通过getOrientation()计算指南针的方位(方位)-使用geoField.getDeclination()的航向和使用myLocation.bearingTo(finalDestiny)的方位。

算法运行得很好,我得到的箭头正好指向我想要的地方。唯一的问题是,要想获得Orientation(),需要启用Compass(),否则它会返回NaN。同时,enableCompass()在MapView上绘制了默认的谷歌指南针,我不想显示它。

我该怎么做?可以使用传感器"手动"计算这个轴承,这样我就不需要使用enableCompass()?

你应该在没有任何代码的情况下实现一个扩展MyLocationOverlay和覆盖drawCompass()的类,我只是尝试了一下,效果很好。在您的活动中,enableCompass()不会绘制指南针。

public class CustomMyLocation extends MyLocationOverlay {
//...

    @Override
    protected void drawCompass(Canvas canvas, float bearing) {
    }
}

我们可以手动计算轴承,两个位置之间的方位可以通过计算

float bearing = mLoc.bearingTo(mLocTarget);
if(bearing<0){
bearing+=360;
}

可以使用传感器计算正常罗盘方位:

float newDirection=0;
if(mSensors!=null)
newDirection=-mSensors[0];
if((newDirection-mCurDirection)> 180)
newDirection-=360;
else if((mCurDirection-newDirection)> 180)
newDirection+=360;

相关内容

  • 没有找到相关文章

最新更新