12 votes

Utilisation du capteur d'orientation pour pointer vers un emplacement spécifique

Je suis en train d'essayer de mettre en place une flèche qui utilise le capteur d'orientation afin de pointer vers un emplacement spécifique. Google Places implémente cette flèche dans une ListView pour chaque lieu trouvé.

J'ai réussi à obtenir l'azimut, mais étant donné un emplacement, je ne sais pas comment procéder pour calculer l'angle dont j'ai besoin. De plus, je dois effectuer les conversions du nord réel et du nord magnétique. Est-ce que quelqu'un a un exemple d'une telle implémentation ?

Merci d'avance.

24voto

Flávio Faria Points 2782

J'ai résolu ça.

float azimuth = // obtenir l'azimut du capteur d'orientation (c'est assez simple)
Location currentLoc = // obtenir l'emplacement du GPS ou du réseau
// convertir les radians en degrés
azimuth = Math.toDegrees(azimuth);
GeomagneticField geoField = new GeomagneticField(
             (float) currentLoc.getLatitude(),
             (float) currentLoc.getLongitude(),
             (float) currentLoc.getAltitude(),
             System.currentTimeMillis());
azimuth += geoField.getDeclination(); // convertit le nord magnétique en nord vrai
float bearing = currentLoc.bearingTo(target); // (déjà en degrés)
float direction = azimuth - bearing;

Si vous allez dessiner une flèche ou quelque chose d'autre pour pointer dans la direction, utilisez canvas.rotate(-direction). Nous passons un argument négatif car les rotations du canevas se font dans le sens inverse des aiguilles d'une montre.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X