我有一个带有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;