如何获取启用GPS的手机相机方向?

4

关于GPS,我发现它只是告诉设备的位置,如何获取相机指向的方向、角度和设备的高度?如何使用启用了GPS的手机制作指南针(2D、3D)?

手机中是否内建有2D、3D指南针,还是仅通过GPS完成?

2个回答

5

我这样做:

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]的值分别是水平和垂直角度。


使用加速度计和磁力计监听器获取加速度和磁场数值,这些数值与GPS数据是分开的吗? - SMUsamaShah
GPS可以告诉您设备的位置和移动情况。但是,要知道方向和角度,需要使用指南针和加速度计。 - Maxim

3

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接