Android:获得准确的方位角

时间:2015-11-29 21:12:49

标签: android android-sensors rotational-matrices sensormanager

我已经搜索了一下如何获得最精确的设备方位角,并想出了这个:

//Activity members
private SensorManager sensorManager;
private float mAzimuth = 0.0f;
private float[] mRotation = null;
private float rMat[] = new float[16];
private float orientation[] = new float[3];
//Later inside the Activity: Rotation Listener
SensorEventListener rotationListener = new SensorEventListener() {
    public void onAccuracyChanged(Sensor sensor, int accuracy) {}
    public void onSensorChanged(SensorEvent event) {
        if (event.sensor.getType() == Sensor.TYPE_ROTATION_VECTOR) {
            mRotation = event.values.clone();
            if (mRotation != null) {
                float RmatVector[] = new float[16];
                SensorManager.getRotationMatrixFromVector(RmatVector, mRotation);
                SensorManager.remapCoordinateSystem(RmatVector, SensorManager.AXIS_X, SensorManager.AXIS_Z, rMat); 
                SensorManager.getOrientation(rMat, orientation);
                mAzimuth = (float)Math.toDegrees((double)orientation[0]);  //azimuth
                if (mAzimuth < 0) {
                    mAzimuth = 360 + mAzimuth;
                }   
            }
            mRotation = null;
        }
    }
};

我尝试做的事情:实施所有关于如何获得最准确的方位角读数的最新指南:

  1. 测试时我非常了解all this(校准,偏置电气设备等)
  2. 此外,我可以在代码中看到我实施此Google建议:
  3.   

    TYPE_ORIENTATION:此传感器在Android 2.2(API级别)中已弃用   8)。传感器框架提供了另外的获取方法   设备方向,在使用方向中讨论   传感器

    问题是所得到的方位角不准确,并且用several good devices进行了测试。

    所以 - 也许我的实施中有一些SW错误?或者整个方法都错了?

    谢谢,

0 个答案:

没有答案