如何在Android上制作精确的指南针?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (85)

这是我一直用来计算度数的代码:

public void getDirection() {        
    mySensorManager = (SensorManager)getSystemService(Context.SENSOR_SERVICE);
    List<Sensor> mySensors = mySensorManager.getSensorList(Sensor.TYPE_ORIENTATION);
    if(mySensors.size() > 0){
        mySensorManager.registerListener(mySensorEventListener, mySensors.get(0), SensorManager.SENSOR_DELAY_UI);           
    }
    else{
        TextView alert = (TextView)findViewById(R.id.instruct);
        alert.setText(getString(R.string.direction_not_found));
        myCompassView.setVisibility(myCompassView.INVISIBLE);

    }
}
private SensorEventListener mySensorEventListener = new SensorEventListener(){

    @Override
    public void onAccuracyChanged(Sensor sensor, int accuracy) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onSensorChanged(SensorEvent event) {
        // TODO Auto-generated method stub
        compassBearing = (float)event.values[0];
        float bearing;
        bearing = compassBearing - templeBearing;
        if (bearing < 0)
            bearing = 360 + bearing;
        myCompassView.updateDirection(bearing);
        }
};

这种方法通常有效,但有时它只是错误的北方,我需要做些什么来获得更准确的位置?

提问于
用户回答回答于

我有几个建议给你:

1)你的设备可能未被校准。为了做到这一点,以8的形式移动它。如果您的设备没有经过校准,或者没有通过将设备指向某个已知的基点方向进行一些测试,并比较这些值,则可以进行测试。通常情况下,如果设备未经过校准,小旋转的方位角值会发生很大变化。这是我会担心的。

2)远离金属物体或产生强磁场的物体。例如,如果您的手机靠近电脑或任何物理键盘,请勿进行测试!这是测试指南针地理定位的纯毒物。

3)记住在将设备倾斜到横向模式时更新方位。这是因为方位角值是基于垂直轴到手机平面的旋转。当您将设备旋转到横向时,此值将更改+/-90º!这不能通过禁用应用程序横向模式来解决!您必须通过分析另外两个轴(俯仰和滚动)周围的旋转来以编程方式确定它。这不是微不足道的,但网络中有一些例子。

编辑:如果您对某些代码感兴趣,请查看 Mixare,它是Android下GPL3下的开源增强现实框架。看看他们关于定位,指南针地理位置和方位的代码。

扫码关注云+社区