我发现GPS的全部内容是它只是告诉设备的位置,如何获得相机指向的方向,角度和设备的高度?如何使用支持GPS的手机制作指南针(2D,3D)?
手机中是否有内置的2D,3D指南针,或者仅通过GPS完成?
答案 0 :(得分: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浮动[3]数组,你根据听众初始化
3 - orientationValues [0]和orientationValues [1]值是水平和垂直角度。
答案 1 :(得分:3)
Maxims方法有效但传感器在大多数手机上都很嘈杂,你需要通过某种类型的滤波器(低通或kahlman)传递传感器的值,否则数字会快速“跳”到几乎无法使用
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