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 :

marqueurs et gestionnaire de clic


Sujet :

APIs Google

  1. #1
    Membre éprouvé Avatar de jmnicolas
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2007
    Messages
    427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2007
    Messages : 427
    Points : 976
    Points
    976
    Par défaut marqueurs et gestionnaire de clic
    Bonjour,

    je suis sur une appli Google Maps : sur ma carte je dois afficher des marqueurs (qui sont en fait des arrêts de bus) à partir d'un fichier XML.

    Jusque là tout va bien, par contre lorsque je veux ajouter chaque marqueur au gestionnaire d'événements (GEvent.addListener) il ne prend en compte que le dernier de ma liste, ce qui fait que tous mes marqueurs affichent le même contenu lorsqu'on clique dessus.

    Voici le bout de code concerné :

    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
    // pour chaque élément du tableau on crée un marqueur
                    for (var i = 0; i < arrets.length; i++)
                     {
                        // on récupère les infos de chaque arrêt
                        var codArret = arrets[i].getAttribute("cod");
                        var nomArret = arrets[i].getAttribute("nom");
                        var lat = parseFloat(arrets[i].getAttribute("lat"));
                        var lon = parseFloat(arrets[i].getAttribute("lon"));
     
     
                        // on définit les coordonnées du marqueur
                        var point = new GLatLng(lat, lon);
     
                        // on crée le marqueur avec les coordonnées
                        var marker = new GMarker(point);
                        marker.value = codArret ;
     
                        // on l'ajoute au gestionnaire d'événements
                        GEvent.addListener (marker, "click", function()
                        {
                            marker.openInfoWindowHtml (nomArret + ' (' + codArret + ')');
                        });
     
                        // on place le marqueur sur la carte
                        map.addOverlay(marker);
                    }
    A noter que j'ai fait un test en rentrant manuellement 2 marqueurs en spécifiant des variables différentes (var nomArret1 et var nomArret2) et ça marche comme ça.

    Je suppose donc qu'il y a un soucis dans la visibilité de mes variables, mais vu que c'est mon premier code en javascript je vois pas où est le soucis.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Salut,

    En passant le marqueur en paramètre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    // on l'ajoute au gestionnaire d'événements
    GEvent.addListener (marker, "click", function(marker)
    {
      marker.openInfoWindowHtml (nomArret + ' (' + codArret + ')');
    });
    A+

  3. #3
    Membre éprouvé Avatar de jmnicolas
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2007
    Messages
    427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2007
    Messages : 427
    Points : 976
    Points
    976
    Par défaut
    Ca ne marche pas non plus, cette fois ci mes marqueurs ne réagissent même plus au clic.

    IE me donne comme erreur "Cet objet ne gère pas cette propriété ou cette méthode".

    Le pire c'est que j'ai repris le code donné sur les tutos Google

  4. #4
    Invité
    Invité(e)
    Par défaut
    Re,

    Tu dois passer par une fonction pour créer ton marqueur (sinon tu l'écrase avec le suivant)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    function createMarker(point,html) {
            var marker = new GMarker(point);
            GEvent.addListener(marker, "click", function() {
              marker.openInfoWindowHtml(html);
            });
            return marker;
    }
     
    var marker = createMarker(point,nomArret + ' (' + codArret + ')')
    map.addOverlay(marker);
    Voir ICI

    A+

  5. #5
    Membre éprouvé Avatar de jmnicolas
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2007
    Messages
    427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2007
    Messages : 427
    Points : 976
    Points
    976
    Par défaut
    Ah oui effectivement ça marche comme ça !

    Je comprend toutefois pas bien pourquoi devoir déporter la création du marqueur en dehors de la boucle ... mais bon ça fait sans doute partie des mystères de JavaScript !

    En tout cas, merci à toi !

    Je joint le code qui fonctionne des fois que ça puisse servir à quelqu'un d'autre :

    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
     // méthode de création de marqueurs
                    function createMarker(pt, cod, info)
                    {
                        var marker = new GMarker(pt);
                        marker.value = cod ;
     
                        // on ajoute au gestionnaire d'événements
                        GEvent.addListener (marker, "click", function()
                        {
                            marker.openInfoWindowHtml (info);
                        });
                        return marker;
                    }
     
     
                    // pour chaque élément du tableau on crée un marqueur
                    for (var i = 0; i < arrets.length; i++)
                     {
                        // on récupère les infos de chaque arrêt
                        var codArret = arrets[i].getAttribute("cod");
                        var nomArret = arrets[i].getAttribute("nom");
                        var lat = parseFloat(arrets[i].getAttribute("lat"));
                        var lon = parseFloat(arrets[i].getAttribute("lon"));
     
     
                        // on définit les coordonnées du marqueur
                        var point = new GLatLng(lat, lon);
     
                        // on crée le marqueur
                        var ifo =  nomArret + ' (' + codArret + ')' ;
                        var marker = createMarker(point, codArret, ifo)
     
                        // on place le marqueur sur la carte
                        map.addOverlay(marker);
                    }

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Tu ne déportes pas la création des marqueurs !
    Simplement, tu crées un nouvel objet qui n'écrase pas les autres.

    a+

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

Discussions similaires

  1. [Google Maps] Ajouter un marqueur lors d'un clic de souris sur la carte
    Par Quentin75 dans le forum APIs Google
    Réponses: 10
    Dernier message: 03/03/2015, 19h39
  2. [Google Maps] Afficher l'infobulle d'un marqueur sans clic
    Par Alain17 dans le forum APIs Google
    Réponses: 2
    Dernier message: 19/10/2013, 12h20
  3. Zoom après un clic sur marqueur
    Par Zebulon777 dans le forum IGN API Géoportail
    Réponses: 2
    Dernier message: 17/12/2012, 13h55
  4. Fermeture Popup marqueur et clic sur la Map
    Par Mides dans le forum IGN API Géoportail
    Réponses: 6
    Dernier message: 21/09/2012, 21h37
  5. [MySQL] Compter Nbres de clics sur marqueur google map API v3
    Par math567 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 27/03/2012, 09h40

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