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 :

Infobulle des marqueur - Api v3 [Google Maps]


Sujet :

APIs Google

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 121
    Par défaut Infobulle des marqueur - Api v3
    Bonjour,

    Je développe avec l'api v3 de Google Map.

    J'ai réalisé une application me permettant d'afficher sur une carte les marqueurs correspondant à des adresses situées dans un fichier xml.

    J'ai ajouté à ces marqueurs une infobulle afin d'indiquer le nom et l'adresse correspondante.

    Or avec l'api V3, les infobulles restent ouvertes même quand on clique sur un autre marqueur.

    Je cherche une solution pour retrouver le fonctionnement de la v2 qui fermait l'infobulle lorsqu'on cliquait sur un autre marqueur.

    Voici la partie de code Javascript correspondante:
    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
    /*
    Fonction appellée au chargement de la page index.php
    Parametres: les coordonnées du point de centrage de la carte et le niveau de zoom
    */
    function load(lat,lng,zoom) 
    {
    	//Définition du point central de la carte
        var coord_centre = new google.maps.LatLng(lat, lng);
    	//Définitions des options de la carte
        var option = {
          zoom: zoom,
          center: coord_centre,
    	  scaleControl: true,
          mapTypeId: google.maps.MapTypeId.ROADMAP
        }
    	//Création de la carte dans le div correspondant et avec les options précédentes
        map = new google.maps.Map(document.getElementById("div_map"), option);
    	//Instanciation d'un objet Geocoder pour conversion des adresses postales en coordonnées GPS
    	geocoder = new google.maps.Geocoder();
    	//Lecture du fichier xml et création des marqueurs    
    	downloadUrl("markers.xml", function(data) {
    		var markers = data.documentElement.getElementsByTagName("marker");
    		for (var i = 0; i < markers.length; i++) 
    		{
    			CreerMarker(markers[i].getAttribute("nom"),markers[i].getAttribute("adresse"));
    		}
    	});
    }
     
    /*
    Fonction de création des marqueurs
    Parametres: l'adresse postale et le nom à afficher
    */
    function CreerMarker(nom, adresse)
    {
    	geocoder.geocode( { 'address': adresse}, function(results, status) 
    	{
    		if (status == google.maps.GeocoderStatus.OK) 
    		{			
    			//Si adresse trouvée, création du marqueur
    			var marker = new google.maps.Marker({
    				map: map, 
    				position: results[0].geometry.location,
    				title: nom
    			});
    			//Ajout de la fenetre d'informations au marqueur
    			var contenu = nom+"<br />"+adresse;
       			var infowindow = new google.maps.InfoWindow({
            		content: contenu
        		});
    			//Création du listener du clic de souris sur le marqueur
    			google.maps.event.addListener(marker, 'click', function() {
    				infowindow.open(map,marker);
        		});
    		}
    		else
    		{
    			alert("Géolocalisation échouée a cause de: " + status);
    		}
    	});	
    }
    Je vous ai joint également un screenshot du résultat pour illustrer le problème.

    J'ai trouvé ceci sur un site, mais je ne suis pas arrivé à le mettre en pratique:
    Ok, one more question and I’m covered (I hope). I made all the different infowindows appear, how can I close the others when I click and open a new one?
    Tried closeInfoWindow(); in the listener function but it disables all of them…


    The easiest way to do this is to just have one instance of the InfoWindow object that you reuse over and over again. That way when you click a new marker the infoWindow is “moved” from where it’s currently at, to point at the new marker.
    Use its setContent method to load it with the correct content.
    Si vous avez une solution, je suis preneur.
    Images attachées Images attachées  

  2. #2
    Membre Expert
    Avatar de emmanuel.remy
    Inscrit en
    Novembre 2005
    Messages
    2 855
    Détails du profil
    Informations personnelles :
    Âge : 57

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 855
    Par défaut
    Salut,

    Ta variable var infowindow = new google.maps.InfoWindow(); doit être mise globale (unicité) et PARTAGEE: actuellement tu en crées autant qu'il y a de bulles.

    Cela doit donner quelque chose comme:
    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
    //variable globale
    var infowindow = null;
    
    /*
    Fonction de création des marqueurs
    Parametres: l'adresse postale et le nom à afficher
    */
    function CreerMarker(nom, adresse)
    {
    	geocoder.geocode( { 'address': adresse}, function(results, status) 
    	{
    		if (status == google.maps.GeocoderStatus.OK) 
    		{			
    			//Si adresse trouvée, création du marqueur
    			var marker = new google.maps.Marker({
    				map: map, 
    				position: results[0].geometry.location,
    				title: nom
    			});
    			//Ajout de la fenetre d'informations au marqueur
    			var contenu = nom+"<br />"+adresse;
    			
          //Création du listener du clic de souris sur le marqueur
    			google.maps.event.addListener(marker, 'click', function() {
              if (!infowindow) {
                infowindow = new google.maps.InfoWindow();
                infowindow.setContent(contenu);
                infowindow.open(map,marker);
              } else {
                infowindow.setContent(contenu);
                infowindow.setPosition(marker.getPosition());
              }
        		});
    		}
    		else
    		{
    			alert("Géolocalisation échouée a cause de: " + status);
    		}
    	});	
    }
    ERE

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 121
    Par défaut
    Merci pour ton aide.

    Ton code fournit le résultat attendu car le contenu de l'infobulle est bien remplacé par celui du marqueur cliqué mais l'infobulle reste sur le premier marqueur cliqué.

    Cela vient du fait que cette ligne n'a aucun effet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    infowindow.setPosition(marker.getPosition());
    L'infobulle étant ouverte avec une ancre, elle y reste attachée:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    infowindow.open(map,marker);
    Extrait de la doc de l'api:
    InfoWindowOptions object specification:
    position:The LatLng at which to display this InfoWindow. If the InfoWindow is opened with an anchor, the anchor's position will be used instead.
    J'ai donc modifié ton code en remplaçant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    infowindow.setPosition(marker.getPosition());
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    infowindow.open(map,marker);
    Cela a pour effet d'ouvrir une nouvelle infobulle sur le marqueur cliqué.

    Merci beaucoup

  4. #4
    Membre Expert
    Avatar de emmanuel.remy
    Inscrit en
    Novembre 2005
    Messages
    2 855
    Détails du profil
    Informations personnelles :
    Âge : 57

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 855
    Par défaut
    Oups, je n'avais pas été assez vigilant , même si je m'étais posé la question. Comme quoi quand on ne teste pas... Dans ce cas pour être super propre tu devrais ajouter un infowindow.close(); avant de refaire ton open.

    Bon dev,

    ERE

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 121
    Par défaut
    Exact c'est plus propre, merci encore

  6. #6
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 2
    Par défaut aide
    bonjour
    je cherche à faire la même chose, carte avec des marqueurs issus d'un XML + cases à cocher
    pourrais-tu me passer ton code ?
    merci

  7. #7
    Membre éprouvé
    Homme Profil pro
    Paramétreur de progiciels
    Inscrit en
    Octobre 2006
    Messages
    970
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Paramétreur de progiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 970
    Par défaut
    Bonjour,

    J'avais le même problème et il est corrigé via vos conseils !

    Merci,
    ZiP

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 121
    Par défaut
    @ aquel33:

    Tu as tout ce qu'il faut dans mon premier post. Il te suffit d'y intégrer les réponses fournies par emmanuel.remy.

    Il faut ensuite créer une page html qui appelle la fonction javascript load().

    Cette fonction prend 3 paramètres qui sont la latitude, la longitude et le niveau de zoom pour initialiser la carte.

    Il te faut ensuite un fichier markers.xml qui a cette forme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?xml version="1.0" encoding="utf-8" ?>
    <markers>
    <marker nom="Toto" adresse=" adresse de toto" />
    <marker nom="Tutu" adresse=" adresse de tutu" />
    </markers>

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

Discussions similaires

  1. [Google Maps] Afficher des marqueurs au passage de la souris
    Par Maxrb dans le forum APIs Google
    Réponses: 1
    Dernier message: 11/06/2010, 11h48
  2. Affichage des marqueurs
    Par niepoc dans le forum MATLAB
    Réponses: 2
    Dernier message: 09/06/2008, 16h36
  3. Configuration des marqueurs XITI
    Par javelot69 dans le forum Statistiques
    Réponses: 2
    Dernier message: 03/10/2007, 11h40
  4. Forme des marqueurs sur courbe
    Par anneso108 dans le forum SAP Crystal Reports
    Réponses: 10
    Dernier message: 05/04/2006, 23h08
  5. Réponses: 3
    Dernier message: 04/09/2002, 09h42

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