18

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

この方法は通常はうまくいきますが、時々間違った北を取得することがあります。より正確な位置を取得するにはどうすればよいですか?

4

1 に答える 1

40

いくつか提案があります。

1)デバイスが調整されていない可能性があります。それを行うには、8の形で動かします(これを参照)。デバイスがキャリブレーションされていないか、デバイスを既知の基点方向に向けてテストを行っていない場合は、値を比較してください。通常、デバイスがキャリブレーションされていない場合、小さな回転に対して方位角の値に大きな変動が見られます。それが私が心配することです。

ここで、センサーが真北ではなく、磁北の方向を示すことを忘れないでください。この差は磁場の偏角として知られており、その値は地球の磁場の変化により、場所によって、また時間によって変化します。このアプリは、相対的な精度でいくつかの値を計算できます。赤緯は通常小さいので、これについてはあまり心配しませんが、適切な精度を求めている可能性があります (私が住んでいる場所では、現在、赤緯は 3° です)。

2) 強い磁場を発生する金属や物から離れてください。たとえば、電話がコンピューターや物理キーボードの近くにある場合は、テストを行わないでください。これは、コンパスジオロケーションをテストするための純粋な毒です。一部のアプリでは、磁場の強度を測定できます (デバイスがサポートしている場合)。金属に近づくと、値が高くなり、方向が大きく変化します。楽しみのために、いくつかの「金属探知機」もあります。このアプリは、磁場の変化を認識し、「金属物体」または磁気的にデバイスに干渉するものに近づくと振動します。

3)デバイスを横向きモードに傾けるときは、必ず方位を更新してください。(記事は必読です! ) これは、方位角の値が電話の平面に対する垂直軸の回転に基づいているためです。デバイスを横向きに回転すると、この値は +/-90º 変化します! これは、アプリケーションのランドスケープ モードを無効にしても解決されません! 他の 2 つの軸 (ピッチとロール) を中心とした回転を分析して、プログラムで決定する必要があります。これは些細なことではありませんが、ネットのどこかにいくつかの例があります。

編集:コードに興味がある場合は、 Mixareをチェックして。これは、GPL3 for Android に基づくオープンソースの拡張現実フレームワークです。方向、コンパスの地理位置情報、方位に関するコードを見てください。

PS: 言及されたアプリケーションの作成者とは何の関係もありません。

于 2011-10-24T15:02:47.213 に答える