IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

Rotation GoogleMap sur rotation de l'appareil vers Marker


Sujet :

Android

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2014
    Messages : 2
    Par défaut Rotation GoogleMap sur rotation de l'appareil vers Marker
    Bonjour à tous!!!

    Voilà je développe en ce moment une appli android qui utilise la map v2 de Google. Mais je rencontre un problème concernant la rotation de la map, en fait, c'est plus une analyse dont j'ai besoin et non pas une erreur ou une exception que je rencontre.
    Voilà mon problème :

    Sur la carte (map), j'ai la position de l'appareil et un marker, je souhaite faire en sorte que dès que l'utilisateur change la position (l'orientation) de son appareil, mais pas dans le sens portrait/paysage, dans le sens où son téléphone est parallèle au sol et il pointe vers une direction... Donc le but serait de faire tourner la map à chaque changement de direction du téléphone pour lui indiquer le chemin à prendre pour atteindre le marker... Par exemple, son téléphone pointe au départ vers un poteau ensuite l'utilisateur fait un demi-tour, conséquence, la map aussi fait un demi-tour pour montrer la direction à prendre pour atteindre le marker.
    J'ai eu plusieurs idées, (vous me dites si je suis sur la bonne piste) j'ai implémenté les écouteurs sur les capteurs (Sensor) en suivant le tuto de mathias (très bon tuto en passant)

    http://mathias-seguy.developpez.com/...roid-capteurs/

    J'ai donc décidé d'utiliser le capteur vecteur d'orientation (partie 9 du tuto) pour récupérer la rotation sur l'axe Y et ainsi faire tourner la map suivant cette valeur. J'ai commencé un bout de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    public void onSensorChanged(SensorEvent event) {
    		// TODO Auto-generated method stub
    		if (event.sensor.getType() == Sensor.TYPE_ROTATION_VECTOR) {
    			// La valeur angulaire pour chaque axe
    			float xRotation = event.values[0];
     
    			/**
                             * Rotation autour de l'axe Y = c'est l'axe vertical donc la map devra tourner autour de cet axe 
                             */
    			yRotation = event.values[1];
    			float zRotation = event.values[2];
     
    			Log.v(TAG, "rotation sur X="+xRotation+"\nrotation sur Y="+yRotation+"\nrotation sur Z="+zRotation);
                    }
    }
    Ensuite dans une autre fonction, je reprends la variable (yRotation)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    CameraPosition cam = getMap().getCameraPosition().bearing(yRotation).build();
    		getMap().animateCamera(cam);
    Mais le souci c'est que je suis sur l'AVD et je n'ai pas de smartphone android pour bien tester mon algo avec les capteurs..

    Svp aidez-moi..
    Vous pourriez me dire si je suis sur la bonne piste.. ou bien j'entreprend mal les choses

    Merci

  2. #2
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2014
    Messages : 2
    Par défaut
    J'ai trouvé la solution !!!
    Je me réponds à moi-même mais je pense que ça peut servir à certains...

    Il faut utiliser les capteurs d'accélération et d'electromagnétisme comme conseillé ici (sur le même tuto que précédemment) pour avoir l'orientation de l'appareil quand celui-ci est placé parallèlement au sol.
    Donc voici le code modifié :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    @Override
    	public void onSensorChanged(SensorEvent event) {
    		// TODO Auto-generated method stub
                    if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
    			acceleromterVector = event.values;
    		} else if (event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD) {
    			magneticVector = event.values;
    		}
     
    		// Demander au sensorManager la matric de Rotation (resultMatric)
    		SensorManager.getRotationMatrix(resultMatrix, null, acceleromterVector,
    				magneticVector);
    		// Demander au SensorManager le vecteur d'orientation associé (values)
    		SensorManager.getOrientation(resultMatrix, values);
    		// l'azimuth
    		myMap.getRotation()[0] = (float) Math.toDegrees(values[0]);
     
    		// le pitch
    		myMap.getRotation()[1] = (float) Math.toDegrees(values[1]);
    		//Log.v(TAG, "y :"+y);
    		// le roll
    		myMap.getRotation()[2] = (float) Math.toDegrees(values[2]);
    		//Log.v(TAG, "z :"+z);		
    	}
    C'est l'azimuth qui nous intéresse, donc nous allons faire tourner la map en fonction de cette valeur renvoyée par le capteur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    	public void rotateMap(LocationClient mLocationClient, float[] rotation){
     
    		CameraPosition oldCam = getMap().getCameraPosition();
     
    		CameraPosition cam = CameraPosition.builder(oldCam).bearing(rotation[0])
    				.build();
    		animateCamera(cam);
    	}
    Ce code ajouté dans une activity avec une google map, va faire tourner la map à chaque fois que l'utilisateur (plutôt son smartphone) va "regarder" dans une direction, c'est-à-dire lorsque le smartphone sera en train de tourner dans le sens horaire (toujours parallèle au sol) alors la map va tourner dans le sens inverse (logique !)
    Voilà, j'espère que je suis assez clair

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 04/03/2011, 14h52
  2. Rotation d'une liste de N crans vers la gauche
    Par rom117 dans le forum Prolog
    Réponses: 2
    Dernier message: 01/01/2011, 17h18
  3. Réponses: 14
    Dernier message: 19/02/2008, 10h55
  4. onclick sur a href avec redirection vers un autre fichier
    Par taka10 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 23/08/2007, 15h39
  5. Réponses: 9
    Dernier message: 30/08/2005, 20h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo