首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在android上制作精确的指南针

如何在android上制作精确的指南针
EN

Stack Overflow用户
提问于 2011-10-24 22:26:09
回答 1查看 29.2K关注 0票数 17

我的android应用程序显示了世界上某个特定地方的方向,因此需要获取指南针的度数。

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

代码语言:javascript
复制
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);
        }
};

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-10-24 23:02:47

我有几个建议给你:

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

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

2)远离会产生强磁场的金属物体或东西。例如,如果你的手机靠近电脑或任何物理键盘,就不要做测试!这是测试指南针地理位置的纯粹毒药。一些apps可以测量磁场的强度(如果设备支持的话)。当你更接近金属物体时,你会体验到更高的值和方向的强烈变化。有趣的是,还有一些"metal detectors":这个应用程序可以识别磁场的变化,当你接近“金属物体”或磁性干扰设备的东西时,它会震动。

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

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

PS:我和上面提到的应用程序的创建者没有任何联系。

票数 38
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7877155

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档