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 :

api v3 - InfoWindow sur des polygon et circle [Google Maps]


Sujet :

APIs Google

  1. #1
    Membre du Club Avatar de spin0us
    Profil pro
    Inscrit en
    Février 2003
    Messages
    87
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 87
    Points : 64
    Points
    64
    Par défaut api v3 - InfoWindow sur des polygon et circle
    Bonjour,

    J'arrive au bout de monde code et voilà que je bute sur un truc qui doit être tout bête. Je charge un ensemble de polygon et circle depuis une chaîne json et je les affiches sur la carte. Jusque là pas de souci particulier. Maintenant je souhaites ajouter des infowindow pour chaque élément. Et là ça coince. Les infowindow ne s'affichent pas, et je n'ai aucune erreur qui remonte.

    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
    var infowindow = new google.maps.InfoWindow;
    function loadZone() {
    	if(typeof(json_string) !== 'undefined') {
    		shapes = new google.maps.MVCArray;
    		var shapesOptions = {
    			fillColor: '#0000FF',
    			strokeWeight: 1,
    			clickable: true,
    			zIndex: 1,
    			editable: false,
    			map: map
    		};
    		var json_data_object = eval("(" + json_string + ")");
    		for(var i in json_data_object) {
    			zone = json_data_object[i];
    			if(zone.id == document.getElementById("siteid").value) continue;
    			if(zone.show == '0') continue;
    			if(zone.type == "circle") {
    				var shapeCircle = new google.maps.Circle({
    					center: new google.maps.LatLng(zone.data.lat, zone.data.lng),
    					radius: parseFloat(zone.data.rad),
    					options: shapesOptions
    				});
    				google.maps.event.addListener(shapeCircle, 'click', function() {
    					alert(shapeCircle.center);
    					infowindow.setContent(zone.name);
    					infowindow.open(map,shapeCircle);
    				});
    				shapes.push(shapeCircle);
    			}
    			if(zone.type == "polygon") {
    				var path = new google.maps.MVCArray;
    				for(var j in zone.data) {
    					path.insertAt(j, new google.maps.LatLng(zone.data[j].lat, zone.data[j].lng));
    				}
    				var shapePolygon = new google.maps.Polygon({
    					path: path,
    					options: shapesOptions
    					});
    				shapes.push(shapePolygon);
    			}
    		}
    	}
    }
    Mon alert(shapeCircle.center); s'affiche bien, mais pas de infowindow.

  2. #2
    Membre du Club Avatar de spin0us
    Profil pro
    Inscrit en
    Février 2003
    Messages
    87
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 87
    Points : 64
    Points
    64
    Par défaut
    Ah enfin, j'ai fini par m'en sortir. Je sais toujours pas pourquoi ma méthode ne fonctionnait pas, mais en tout cas pour ceux que ça pourrait intéresser, voici la solution que j'ai trouvée: passer par une fonction pour l'event.

    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
    var infowindow = new google.maps.InfoWindow();
    function loadZone() {
    	if(typeof(json_string) !== 'undefined') {
    		shapes = new google.maps.MVCArray;
    		var shapesOptions = {
    			fillColor: '#0000FF',
    			strokeWeight: 1,
    			clickable: true,
    			zIndex: 1,
    			editable: false
    		};
    		var json_data_object = eval("(" + json_string + ")");
    		for(var i in json_data_object) {
    			var zone = json_data_object[i];
    			if(zone.id == document.getElementById("siteid").value) continue;
    			if(zone.show == '0') continue;
    			if(zone.type == "circle") {
    				var shapeCircle = new google.maps.Circle({
    					center: new google.maps.LatLng(zone.data.lat, zone.data.lng),
    					radius: parseFloat(zone.data.rad),
    					options: shapesOptions
    				});
    				shapes.push(shapeCircle);
    				addInfowindowToShape(shapeCircle, zone);
    				shapeCircle.setMap(map);
    			}
    			if(zone.type == "polygon") {
    				var path = new google.maps.MVCArray;
    				for(var j in zone.data) {
    					path.insertAt(j, new google.maps.LatLng(zone.data[j].lat, zone.data[j].lng));
    				}
    				var shapePolygon = new google.maps.Polygon({
    					path: path,
    					options: shapesOptions
    					});
    				shapes.push(shapePolygon);
    				addInfowindowToShape(shapePolygon, zone);
    				shapePolygon.setMap(map);
    			}
    		}
    	}
    }
     
    function addInfowindowToShape(theShape, zoneData) {
    	google.maps.event.addListener(shapes.getAt(shapes.getLength() - 1), 'click', function(event) {
    		infowindow.setPosition(event.latLng);
    		infowindow.setContent('<h3>' + zoneData.name + '</h3><small>' + zoneData.desc + '</small>' );
    		infowindow.open(map);
    		});
    }

  3. #3
    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

  4. #4
    Membre du Club Avatar de spin0us
    Profil pro
    Inscrit en
    Février 2003
    Messages
    87
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 87
    Points : 64
    Points
    64
    Par défaut
    Je suis pas expert en fonctionnement exacte de la boucle for, mais si
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for(var i in json_data_object)
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    nb = json_data_object.length
    for( i = 0; i < nb; i++)
    sont équivalent en sortie de boucle (à savoir que i sera égale à la taille de json_data_object), alors oui en effet le problème était le même. Et dans ce cas désolé d'avoir ouvert ce sujet pour rien

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

Discussions similaires

  1. Contains sur des Polygon
    Par aurelientp dans le forum Requêtes
    Réponses: 0
    Dernier message: 26/01/2010, 20h46
  2. Superposer des polygones sur une image
    Par kap dans le forum Images
    Réponses: 7
    Dernier message: 22/10/2009, 12h20
  3. API pour effectuer des opérations sur des matrices
    Par Mobius dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 14/11/2008, 15h18
  4. Projet sur des polygones en SDL
    Par alexis0788 dans le forum SDL
    Réponses: 8
    Dernier message: 30/04/2008, 17h08
  5. Réponses: 1
    Dernier message: 02/05/2007, 09h22

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