my 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);
}
};
この方法は通常は機能しますが、北が間違っている場合があります。より正確な位置を取得するにはどうすればよいですか?
私はあなたにいくつかの提案があります:
1)デバイスが調整されていない可能性があります。それを行うには、8の形で動かします( これを参照 )。デバイスがキャリブレーションされているかどうかを確認しない場合は、デバイスを既知の基点方向に向けてテストを行い、値を比較します。通常、デバイスがキャリブレーションされていない場合、小さな回転で方位角値に大きな変動が見られます。それが私が心配することです。
さて、センサーが真北ではなく磁北への方位を与えることを忘れないでください!この違いは磁場の赤緯として知られており、その値は場所ごとに、そして地球の磁場の変化によって時々変化します。 このアプリ 相対的な精度でいくつかの値を計算できます。赤緯は通常小さいのであまり心配しませんが、あなたは良い精度を探しているかもしれません(私が住んでいる場所では現在、偏角は3ºです)。
2)強い磁場を発生する金属物や物に近づかないでください。たとえば、コンピュータの近くに電話がある場合や物理的なキーボードがある場合は、テストを行わないでください。これは、コンパスジオロケーションをテストするための純粋な毒です。一部の apps は、磁場の強度を測定できます(デバイスがそれをサポートしている場合)。あなたが金属のものに近づくとき、あなたはより高い価値と方向の強い変化を経験するでしょう。おもしろいことに、いくつかの「 金属探知機 」もあります。このアプリは、磁場の変化を認識し、「金属物体」やデバイスに磁気的に干渉するものに近づくと振動します。
3)デバイスを横向きモードに傾けるときは、方位を更新することを忘れないでください。 ( 記事は必読です! )これは、方位角の値が平面に垂直な軸の回転に基づいているためです。電話の。デバイスを横向きに回転させると、この値は+/-90º変化します。 これは、アプリケーションランドスケープモードを無効にしても解決されません!他の2つの軸(ピッチとロール)の周りの回転を分析して、プログラムで決定する必要があります。これは簡単なことではありませんが、ネットのどこかにいくつかの例があります。
編集:コードに興味がある場合は、 Mixare をチェックしてください。 、Android向けGPL3に基づくオープンソースの拡張現実フレームワークです。向き、コンパスの地理位置情報、方位に関するコードをご覧ください。
PS:私は言及されたアプリケーションの作成者とは何の関係もありません。