【问题标题】:How can I calculate getOrientation() without enabling compass?如何在不启用指南针的情况下计算 getOrientation()?
【发布时间】:2012-08-30 14:36:12
【问题描述】:

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

该算法完美运行,我让箭头准确指向我想要的位置。唯一的问题是,为了能够 getOrientation(),需要启用 Compass(),否则返回 NaN。同时,enableCompass() 在 MapView 上绘制默认的 google 指南针,我不想显示。

我该怎么做?可以使用传感器“手动”计算这个方位,所以我不需要使用 enableCompass()?

【问题讨论】:

  • 是的,有可能,您应该查看:android 传感器方向。但是你必须做一些数学才能让它工作。
  • 或者你应该使用隐藏的地图视图;)

标签: android location android-mapview compass-geolocation bearing


【解决方案1】:

你应该实现一个类扩展 MyLocationOverlay 并覆盖 drawCompass() 没有任何代码,我只是尝试它并完美地工作。在您的活动中,enableCompass() 不会绘制指南针。

public class CustomMyLocation extends MyLocationOverlay {
//...


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

【讨论】:

  • 我没有想到,但效果很好。然后,您可以启用指南针以便获得方向,但可以隐藏它或绘制您想要的任何内容。
【解决方案2】:

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

计算
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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-08
    • 2011-12-27
    • 1970-01-01
    • 2021-01-14
    • 2013-11-28
    • 1970-01-01
    相关资源
    最近更新 更多