【问题标题】:How to make an accurate compass on android如何在android上制作准确的指南针
【发布时间】:2011-10-24 14:26:09
【问题描述】:

我的 android 应用程序显示世界上特定地点的方向,因此需要获取指南针度数。
这是我用来计算度数的代码:

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);
        }
};

这种方法通常有效,但有时它只是获取错误的北方,我该怎么做才能获得更准确的位置?

【问题讨论】:

标签: android orientation compass-geolocation android-sensors


【解决方案1】:

我有几个建议给你:

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

现在,不要忘记传感器为您提供磁北的方位,而不是真北!这种差异被称为磁场的偏角,由于地球磁场的变化,它的值会随着地点和时间的变化而变化。 This app 可以相对准确地为您计算一些值。我不会太担心这一点,因为偏角通常很小,但您可能正在寻找良好的精度(我住的地方目前的偏角是 3º)。

2) 远离金属物体或产生强磁场的东西。例如,如果您的手机靠近计算机或任何物理键盘,请不要进行测试!这是测试指南针地理位置的纯毒药。有些apps 可以测量磁场强度(如果设备支持的话)。当您更接近金属材料时,您将体验到更高的价值和强烈的方向变化。为了好玩,还有一些“metal detectors”:当你靠近“金属物体”或对设备产生磁干扰的东西时,这个应用程序会识别磁场的变化并振动。

3) 当您将设备倾斜到横向模式时,请记住更新方位。 (article is a must read!) 这是因为方位角值是基于垂直轴与手机平面的旋转。当您将设备旋转到横向时,此值会更改 +/-90º! 禁用应用程序横向模式无法解决此问题!您必须通过分析围绕其他两个轴(俯仰和滚动)的旋转以编程方式确定它。这不是微不足道的,但在网络的某个地方有一些例子。

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

PS:我与上述应用程序的创建者没有任何联系。

【讨论】:

  • 1) 有没有办法告诉用户设备没有校准?2) 有没有办法知道什么时候有磁干扰? 3)我禁用了横向模式,所以我不用担心,对吧?
  • @MobileCushion 很好的回答,非常感谢
  • 磁偏角通常是一个很小的值,但可能高达 180 度(沿着磁北和北极之间绘制的线),因此可能不应该被忽略。
猜你喜欢
  • 1970-01-01
  • 2015-03-26
  • 1970-01-01
  • 2010-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多