传感器数据相对于真正的北方安卓

时间:2017-01-23 19:46:26

标签: android android-sensors

我正在使用SensorEvent API以便从不同的传感器获取我的应用的数据(更具体地说:TYPE_ROTATION_VECTOR,TYPE_GRAVITY,TYPE_GYROSCOPE,TYPE_LINEAR_ACCELERATION)。现在,我知道在iOS中有所谓的CMAttitudeReferenceFrameXTrueNorthZVertical,它提供了相对于True North的所有传感器值,而z轴将始终是垂直的。

我在Android中找不到类似的东西,所以我想手动翻译坐标系。我也在考虑使用remapCoordinateSystem method。但是,我仍然不知道如何获取有关 True North 的数据。有没有人必须先处理类似的事情?

1 个答案:

答案 0 :(得分:0)

这个答案的灵感来自使用here的课程:

Yout应该在SensorEventListener中使用onSensorChanged方法

@Override
        public void onSensorChanged(SensorEvent event) {
            if (event.sensor.getType() == Sensor.TYPE_ROTATION_VECTOR) {
               //get the rotation matrix from the sensor (this will be using the magnetic north)
                SensorManager.getRotationMatrixFromVector(mRotationMatrix, event.values);
                //change the coordinate system (your new matrix is in the variable mChangedRotationMatrix)
                SensorManager.remapCoordinateSystem(mRotationMatrix, SensorManager.AXIS_Y,
                        SensorManager.AXIS_MINUS_X, mChangedRotationMatrix);
                //get the orientationMatrix of your new coordinate system
                SensorManager.getOrientation(mChangedRotationMatrix, mOrientation);
               //get the magnetic heading 
               float magneticHeading = (float) Math.toDegrees(mOrientation[0]); 
              //adjust accordingly by calculating the true north with either the "computeTrueNorth" method available the above link or the method used in the link below

            }
        }

要以度数获得真北,您可以使用this answer