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

APIs Google Discussion :

Recentrer ma carte sur la dernière position connue


Sujet :

APIs Google

  1. #1
    Membre du Club
    Inscrit en
    Octobre 2006
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 82
    Points : 55
    Points
    55
    Par défaut Recentrer ma carte sur la dernière position connue
    Bonjour,

    J'affiche sans souci une carte, avec une trentaine d'icônes ayant chacune une infowindow.
    la carte se rafraichit toutes les minutes.
    Le problème, c'est que la carte se recentre systématiquement sur le dernier point affiché. on est obligé toutes le sminutes de remettre "à la main" la carte à la position où on traavaillait avant.

    J'aimerais elle se centre sur le dernier centre connu.
    J'utilise le principe suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    // on enregistre la dernière position connue
    carte.addListener('center_changed', function() {
           dernierePosition = carte.getCenter();
    });
     
    // j'affiche mes marqueurs + infowindow
    code...
     
    // je recentre ma carte
    carte.panTo(dernierePosition);
    Avez-vous une idée ? Voulez-vous plus d'info ?

  2. #2
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 089
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 089
    Points : 44 660
    Points
    44 660
    Par défaut
    Bonjour,
    Le problème, c'est que la carte se recentre systématiquement sur le dernier point affiché.
    c'est donc le code de la fonction de rafraichissement qu'il conviendrait de nous fournir, il contient vraisemblablement une instruction qui force le centrage sur ton dernier point chargé, peut être ce que tu nous montre d’ailleurs !?!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    // je recentre ma carte
    carte.panTo(dernierePosition);

  3. #3
    Membre du Club
    Inscrit en
    Octobre 2006
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 82
    Points : 55
    Points
    55
    Par défaut
    Merci pour ta réponse NoSmoking.
    Voilà le code complet de ma fonction :
    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
     
    function initialiser(listechauffeurs)
    {
    	// paramètres initiaux de la carte
    	var centreDepart = new google.maps.LatLng(47.238222, -1.5609655); // Nantes
    	var dernierePosition = new google.maps.LatLng();
    	var listeMarqueurs = []; // tableau de marqueurs
    	var listePanneaux = []; // tableau de panneauxinfos
    	var zoneMarqueurs = new google.maps.LatLngBounds(); // zone rectangulaire
     
    	function setMarker(data, lat_user, lng_user, nom, forme)
    	{
    		var myLatlng = new google.maps.LatLng(lat_user, lng_user);
     
    		var marqueur = new google.maps.Marker({
    			'map': carte,
    			'flat': true,
    			'icon': iconeCamion32,
    			'title': nom,
    			'position': myLatlng
    		});
     
    		contentString = '<div class="infomarqueur">' + data + '</div>'; // Contenu de l'infobulle
     
    		var panneauInfo = new google.maps.InfoWindow({
    			content: contentString,
    			position: myLatlng
    		});
     
    		// on ajoute le marqueur à la liste des marqueurs
    		listeMarqueurs.push(marqueur);
    		listePanneaux.push(panneauInfo);
    		// attache le panneau au marqueur
    		panneauInfo.open(carte, marqueur);
     
    	} // fin function setMarker
     
    	// options de la carte
    	var options = {
    		center: centreDepart,
    		zoom: 12,
    		mapTypeId: google.maps.MapTypeId.ROADMAP
    	};
     
    	// var positions;
    	function enleveMarqueurs() {
    		for (var i = 0; i < listeMarqueurs.length; i++)
    		{
    			listeMarqueurs[i].setMap(null);
    		}
    		listeMarqueurs = [];
    		for (var i = 0; i < listePanneaux.length; i++)
    		{
    			listePanneaux[i].close();
    		}
    		listePanneaux = [];
    	}		
     
    	// on créé la carte.
    	// NB. j'ai déclaré sans mettre var devant pour rendre l'objet carte visible de l'extérieur de cette fonction
    	carte = new google.maps.Map(document.getElementById("carte_tu"), options);
     
    	// on enregistre la dernière position connue
    	carte.addListener('center_changed', function() {
    		dernierePosition = carte.getCenter();
    	});
     
    	// on affiche les marqueurs
    	function afficheMarqueurs(strListe)
    	{	
    		// on cherche les positions à afficher en AJAX
    		$.ajax({
    			type : 'GET', // envoi des données en GET ou POST
    			url : 'get_adresses.php', // url du fichier de traitement
    			dataType: "json",
    			data : 'lc=' + escape(strListe), // données à envoyer
    			success : function(data){ // traitements JS à faire APRES le retour de l'url
    				positions = data; // récupération des résultats en JSON
    				if (positions.length > 0)
    					for (i = 0; i < positions.length; i++) {
    						// alert(positions[i].lat);
    						setMarker(positions[i].loc, positions[i].lat, positions[i].lng, positions[i].nom, window['blue' + positions[i].forme]);
    					}
    			}
    		}); // fin ajax
    		// carte.panTo(dernierePosition);
     
    		// rappel de la fonction
    		setTimeout( function(){
    			enleveMarqueurs();
    			afficheMarqueurs(strListe);
    		}, 60000);
     
    	}
     
    	afficheMarqueurs(listechauffeurs);
     
    } // fin fonction initialiser()
    Tu le vois, je transmet une liste d'identifiants d'objets à afficher, et en ajax, je vais chercher leur position toutes les minutes pour rafraîchir ma carte.
    Mais cette dernière se centre toujours sur le dernier marqueur affiché et non sur sa dernière position enregistrée...

  4. #4
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 089
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 089
    Points : 44 660
    Points
    44 660
    Par défaut
    Ajoute un disableAutoPan:true sur tes InfoWindows.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var panneauInfo = new google.maps.InfoWindow({
        content: contentString,
        disableAutoPan: true,
        position: myLatlng
    });

Discussions similaires

  1. dernière position GPS connue
    Par bza88 dans le forum API standards et tierces
    Réponses: 1
    Dernier message: 08/10/2013, 13h56
  2. Réponses: 3
    Dernier message: 18/03/2008, 20h57
  3. Parse error: unexpected $ sur la dernière ligne..
    Par zamoto dans le forum Langage
    Réponses: 6
    Dernier message: 01/06/2006, 12h16
  4. [XSL-FO] Afficher sur la dernière page seulement !!
    Par Rumeurs dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 31/01/2006, 21h05
  5. Réponses: 2
    Dernier message: 01/08/2005, 16h36

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