关于GPS,我发现它只是告诉设备的位置,如何获取相机指向的方向、角度和设备的高度?如何使用启用了GPS的手机制作指南针(2D、3D)?
手机中是否内建有2D、3D指南针,还是仅通过GPS完成?
关于GPS,我发现它只是告诉设备的位置,如何获取相机指向的方向、角度和设备的高度?如何使用启用了GPS的手机制作指南针(2D、3D)?
手机中是否内建有2D、3D指南针,还是仅通过GPS完成?
我这样做:
1 - 使用加速度计和磁力计监听器获取加速度和磁场值。
2 - 将这些值转换为方向:
private float[] rMatrix = new float[9];
private float[] outR = new float[9];
SensorManager.getRotationMatrix(rMatrix, null, accelerometerValues, magneticValues);
SensorManager.remapCoordinateSystem(rMatrix, SensorManager.AXIS_X, SensorManager.AXIS_Z, outR);
SensorManager.getOrientation(outR, orientationValues);
在这里,accelerometerValues和magneticValues是float[3]数组,在相应的监听器中进行初始化。
3 - orientationValues[0]和orientationValues[1]的值分别是水平和垂直角度。
Maxim的方法可行,但是大多数手机的传感器非常嘈杂,您需要通过某种类型的滤波器(低通或卡尔曼)传递传感器的值,否则数字将会快速"跳动"并且几乎无法使用。
outR
将以弧度为单位,因此您需要转换为角度:
Math.toDegrees(values[0]); // for 0, 1, 2 (Azimuth, Pitch, Roll)
方位角 (values[0]
) 需要进行调整,因为它返回的数值在 -180 到 180 之间变化,可以采用以下方式进行调整:
if (values[0] < 0) values[0] = 360 + values[0]; // Translate from - to positive azimuth