我正在开发一款Android设备,它没有磁力计,但有旋转传感器(陀螺仪)和重力传感器和GPS。我想从这些传感器确定 True North / Azimuth ,但无法弄清楚如何。如果没有磁力计,我该如何确定该设备的方向?很明显,它知道North的位置,地图应用程序工作得很好。
答案 0 :(得分:0)
<强>更新强>:
你可以Rotation Vector Sensor看起来非常适合你的情况。
private SensorManager mSensorManager;
private Sensor mSensor;
...
mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ROTATION_VECTOR);
您想要的坐标系统如下:
Android提供了很多的传感器
如果您特别希望使用陀螺仪(Sensor.TYPE_GYROSCOPE
),您可以这样做(取自Google example):
private SensorManager mSensorManager;
private Sensor mSensor;
...
mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE);
public void onSensorChanged(SensorEvent event) {
//...
}
但您可以尝试检查是否可以使用更高级别的API来利用多个传感器
你应该看看JavaCodeGeeks的这个simple example,他们利用默认的Sensor.TYPE_ORIENTATION
构建一个安卓指南针
关于Sensor.TYPE_ORIENTATION的更多信息。 According to Google您仍然可以使用设备方向,但可以通过调用getOrientation()
而不是直接通过传感器进行操作。
我们建议您不要使用方向传感器的原始数据 你使用
getRotationMatrix()
方法结合使用 用于计算方向值的getOrientation()
方法,如下所示 下面的代码示例。作为此过程的一部分,您可以使用 将方向值转换为的remapCoordinateSystem()
方法 您的申请的参考框架。
坏消息是getOrientation()
和旧Sensor.TYPE_ORIENTATION
至少部分依赖于磁力计
希望这有帮助!