Comment faire une boussole précise sur android
mon application android montre le sens d'une place particulière dans le monde et, par conséquent, les besoins en la matière pour obtenir la boussole degré.
C'est le code que j'ai utilisé pour calculer les degrés:
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);
}
};
Cette méthode fonctionne, mais parfois il est juste le mauvais nord, que dois-je faire pour obtenir une localisation plus précise?
- Ce serait une bonne question à ajouter à la nouvelle area51.stackexchange.com/proposals/102228/... StackExchange proposition.
Vous devez vous connecter pour publier un commentaire.
J'ai quelques suggestions pour vous:
1) Votre appareil ne peut pas être calibré. Pour ce faire, déplacez-le autour de dans une forme de 8 (voir ce). Si vous ne le faites pas si votre appareil est étalonné ou de ne pas faire quelques tests en pointant l'appareil à certains connus point cardinal de la direction et de comparer les valeurs. En règle générale, si un périphérique n'est pas calibré, vous verrez de grandes variations dans la valeur d'azimut pour les petites rotations. C'est ce que je serais inquiet.
Maintenant, n'oubliez pas que le capteur de vous donne l'azimut vers le Nord Magnétique, et non pas de Vrais Nord! Cette différence est connue comme la déclinaison du champ magnétique et de sa valeur de change de lieu en lieu et de temps à autre en raison de changements dans le champ magnétique de la Terre. Cette application peut calculer certaines valeurs pour vous, avec une relative précision. Je ne serais pas trop inquiet à ce sujet que la déclinaison est généralement faible, mais vous pourriez être à la recherche d'une bonne précision (où je vis la déclinaison est 3º, actuellement).
2) Rester à l'écart des objets métalliques ou des trucs qui génèrent un champ magnétique fort. Par exemple, ne pas faire des tests si vous avez votre téléphone à proximité de l'ordinateur ou un clavier physique! C'est de la pure poison pour le test de la boussole-la géolocalisation. Certains apps pouvez mesurer l'intensité du champ magnétique (si l'appareil le permet). Lorsque vous vous rapprochez de metal, vous ferez l'expérience des valeurs plus élevées et à de forts changements dans les directions. Pour le fun, il y a aussi quelques "détecteurs de métaux": cette application reconnaît les changements dans le champ magnétique et vibre lorsque vous êtes proche "objet métallique" ou des trucs que magnétiquement interférer avec l'appareil.
3) n'oubliez pas de mettre à jour le palier lorsque vous inclinez votre appareil en mode paysage. (l'article est à lire absolument!) C'est parce que la valeur d'azimut est basé sur la rotation de l'axe perpendiculaire au plan de la téléphone. Lorsque vous faites pivoter l'appareil en mode paysage, cette valeur est modifiée de +/-90°! Ce n'est pas résolu par la désactivation de l'application en mode paysage! Vous aurez à déterminer par programmation en analysant les rotations autour de l'autre à deux axes (tangage et roulis). Ce n'est pas anodin, mais il y a quelques exemples, quelque part dans le filet.
edit: Si vous êtes intéressé par un peu de code, consultez Mixare, c'est un open source de réalité augmentée cadre sous GPL3 pour Android. Jetez un oeil à leur code sur l'orientation, boussole de géolocalisation et de roulement.
PS: je n'ai pas toute sorte de connexion avec les créateurs des applications mentionnées ci-dessus.