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 :

effectuer une boucle [Google Maps]


Sujet :

APIs Google

  1. #1
    Membre éclairé Avatar de ledisciple
    Homme Profil pro
    observateur de nuage niveau 2.3
    Inscrit en
    Août 2008
    Messages
    860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : observateur de nuage niveau 2.3

    Informations forums :
    Inscription : Août 2008
    Messages : 860
    Points : 723
    Points
    723
    Par défaut effectuer une boucle
    Bonjour

    le but du jeu de ce code est de pouvoir récupérer les coordonnées maps de différentes adresses, afin de les intégrer dans une base de données.

    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
    var geocoder = new google.maps.Geocoder(); //Fonction de géocodage
     
    					//Lieu est le tableau issu de la requête
    				   for (Val in Lieu){
     
    						   /* Appel au service de geocodage avec l'adresse en paramètre */
    						   geocoder.geocode( { 'address': Lieu[Val]}, function(results, status) {
    							/* Si l'adresse a pu être géolocalisée */
    							if (status == google.maps.GeocoderStatus.OK) {
    							 /* Récupération de sa latitude et de sa longitude */
    							latitude = results[0].geometry.location.lat();
    							longitude = results[0].geometry.location.lng();
     
    							document.getElementById('bidouille').innerHTML +="L'addresse "+Lieu[Val] +" peut avoir ces coordonnées " +latitude+ " "+ longitude+" <a href='http://maps.google.fr/maps?q=" +latitude+ "+"+ longitude+"&spn=0.010626,0.022724&sll=46.75984,1.738281&sspn=10.794142,23.269043&t=h&z=16' target='_blank'>Voir</a><br />";
    							 } else {
    							  alert("Le geocodage n\'a pu etre effectue pour la raison suivante: " + status);
    							 }
    							});
     
    				}
    cela me donne
    L'addresse 17 BD CHARGELEGUE 79340 VASLES peut avoir ces coordonnées 46.3186931 -0.48921280000001843 Voir
    L'addresse 17 BD CHARGELEGUE 79340 VASLES peut avoir ces coordonnées 46.575572 -0.02518899999995483 Voir
    comme vous pouvez le constater il affiche deux fois la même adresse (la dernière de la requête), mais en revanche, les coordonnées changent bien.

    Où ais-je fait une erreur?

    Merci pour votre réponse

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 120
    Points : 44 917
    Points
    44 917
    Par défaut
    Bonjour,
    ton problème est similaire à celui expliqué dans la Pourquoi l'InfoWindow n'affiche rien quand je clique sur le marker ?.
    La seule différence est que tu utilises une boucle for..in ce qui fait que cela ne plante pas

  3. #3
    Membre éclairé Avatar de ledisciple
    Homme Profil pro
    observateur de nuage niveau 2.3
    Inscrit en
    Août 2008
    Messages
    860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : observateur de nuage niveau 2.3

    Informations forums :
    Inscription : Août 2008
    Messages : 860
    Points : 723
    Points
    723
    Par défaut toujours pas ....
    j'ai le même problème avec ce code :

    Lorsque je mets

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    infowindow.setContent( "gg")
    il m'affiche bien gg dans mon info-bulle. Mais lorsque
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    infowindow.setContent( Lieu[this.numero])
    il m'affiche l'erreur dans le code ci-contre

    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
    for(var i = 0; i < Lieu.length; i++){
     
    			//on affiche le marqueur
    			var marqueur = new google.maps.Marker({
    			'numero' : i,
    			position: new google.maps.LatLng(Lieu[i]["longitude"], Lieu[i]["lattitude"]),
    			map: carte,
    			});
     
    		//Info bulle
    		google.maps.event.addListener(marqueur, 'click', function() {
    		// affectation du contenu en utilisant this.numero
    		infowindow.setContent( Lieu[this.numero]); //Erreur: Valeur incorrecte pour la propriété <content>*: 
    Fichier Source*: http://maps.gstatic.com/intl/fr_ALL/mapfiles/api-3/9/0/main.js
    Ligne*: 27
    		// affichage InfoWindow
    		infowindow.open( this.getMap(), this);
    		carte.setZoom(15);
    		});
     
    		//effectue un zoom 9 à la fermeture de l'info-bulle
    		google.maps.event.addListener(infowindow,'closeclick',function(){
    		carte.setZoom(9);
    		});
     
    	}
    Qu'ai-je fait de mal?

  4. #4
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 120
    Points : 44 917
    Points
    44 917
    Par défaut
    - vérifies ce qu'il y a dans Lieu[this.numero]
    - comment est ton tableau Lieu?

  5. #5
    Membre éclairé Avatar de ledisciple
    Homme Profil pro
    observateur de nuage niveau 2.3
    Inscrit en
    Août 2008
    Messages
    860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : observateur de nuage niveau 2.3

    Informations forums :
    Inscription : Août 2008
    Messages : 860
    Points : 723
    Points
    723
    Par défaut
    Citation Envoyé par NoSmoking Voir le message
    - vérifies ce qu'il y a dans Lieu[this.numero]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    alert (Lieu[this.numero]);
    me donne en boucle
    undefined
    Citation Envoyé par NoSmoking Voir le message
    - comment est ton tableau Lieu?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <script type="text/javascript">Lieu = new Array();
    	Lieu[0] = new Array();
    	Lieu[0]['longitude'] = 46.571961;
    	Lieu[0]['lattitude'] = -0.024054;
    	Lieu[0]['endroit'] = '17 BD CHARGELEGUE 79340 VASLES';
     
    	Lieu[1] = new Array();
    	Lieu[1]['longitude'] = 46.313124;
    	Lieu[1]['lattitude'] = -0.54112;
    	Lieu[1]['endroit'] = '269 AV DU MARAIS POITEVIN 79460 MAGNE';
    ...
    </script>
    J'ai bien ça aussi, mais ça me donne toujours le même "endroit" dans chaque info-bulle, soit le dernier de mon tableau Lieu

    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
    for(var i = 0; i < Lieu.length; i++){
    			//on affiche le marqueur
    			var marqueur = new google.maps.Marker({
    			position: new google.maps.LatLng(Lieu[i]["longitude"], Lieu[i]["lattitude"]),
    			map: carte,
    			});
    			//Info bulle			//http://www.developpez.net/forums/d927410/webmasters-developpement-web/javascript/bibliotheques-frameworks/apis-google/google-maps-api-v3-infowindow/
    			//https://developers.google.com/maps/documentation/javascript/reference?hl=el-GR#InfoWindow
    			//effectue un zoom sur la carte à l'ouverture de l'info-bulle
     
    		var texte = Lieu[i]["endroit"];
    		//Info bulle
    		var infowindow = new google.maps.InfoWindow({
    		});
    		//Info bulle
    		google.maps.event.addListener(marqueur, 'click', function() {
    		infowindow.setContent(texte);
    		// affichage InfoWindow
    		infowindow.open( carte, this);
    		carte.setZoom(15);
    		});
     
    		//effectue un zoom 9 à la fermeture de l'info-bulle
    		google.maps.event.addListener(infowindow,'closeclick',function(){
    		carte.setZoom(9);
    		});
     
    	}

  6. #6
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 120
    Points : 44 917
    Points
    44 917
    Par défaut
    post #3
    vu la structure de ton tableau il n'est pas surprenant que cela te retourne une erreur, le paramètre attendu par setContent est une String, alors que tu lui passes un Array
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    infowindow.setContent( Lieu[this.numero])
    dans ce cas il fallait mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    infowindow.setContent( Lieu[this.numero]['endroit']);
    post #5
    le fait de mettre, Lieu[i]["endroit"], dans une variable,var texte = Lieu[i]["endroit"], reviens au même que ce que tu faisais au début, tu reviens pile-poil dans l'exemple donné dans la faq.

    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
    for (var i = 0; i < Lieu.length; i++) {
      //on affiche le marqueur
      var marqueur = new google.maps.Marker({
        'indice': i, 
        'position': new google.maps.LatLng(Lieu[i]['longitude'], Lieu[i]['lattitude']),
        'map': carte,
      });
      var infowindow = new google.maps.InfoWindow();
      //Info bulle
      google.maps.event.addListener(marqueur, 'click', function () {
        infowindow.setContent( Lieu[this.indice]['endroit']);
        infowindow.open(this.getMap(), this);
        this.getMap().setZoom(15);
      });
    }

  7. #7
    Membre éclairé Avatar de ledisciple
    Homme Profil pro
    observateur de nuage niveau 2.3
    Inscrit en
    Août 2008
    Messages
    860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : observateur de nuage niveau 2.3

    Informations forums :
    Inscription : Août 2008
    Messages : 860
    Points : 723
    Points
    723
    Par défaut
    Citation Envoyé par NoSmoking Voir le message
    post #3
    vu la structure de ton tableau il n'est pas surprenant que cela te retourne une erreur, le paramètre attendu par setContent est une String, alors que tu lui passes un Array
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    infowindow.setContent( Lieu[this.numero])
    dans ce cas il fallait mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    infowindow.setContent( Lieu[this.numero]['endroit']);
    oui, là, j'avoue que je n'ai pas assez réfléchi ... désolé

    par contre je ne connais pas du tout "this"
    J'ai trouvé ceci : http://t-templier.developpez.com/tut...ipt-poo1/#L2.3

    Ca te parait être un bon tuto pour apprendre?

  8. #8
    Membre éclairé Avatar de ledisciple
    Homme Profil pro
    observateur de nuage niveau 2.3
    Inscrit en
    Août 2008
    Messages
    860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : observateur de nuage niveau 2.3

    Informations forums :
    Inscription : Août 2008
    Messages : 860
    Points : 723
    Points
    723
    Par défaut
    mais je n'y arrive toujours pas pour ...
    Citation Envoyé par ledisciple Voir le message

    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
    var geocoder = new google.maps.Geocoder(); //Fonction de géocodage
     
    					//Lieu est le tableau issu de la requête
    				   for (Val in Lieu){
     
    						   /* Appel au service de geocodage avec l'adresse en paramètre */
    						   geocoder.geocode( { 'address': Lieu[Val]}, function(results, status) {
    							/* Si l'adresse a pu être géolocalisée */
    							if (status == google.maps.GeocoderStatus.OK) {
    							 /* Récupération de sa latitude et de sa longitude */
    							latitude = results[0].geometry.location.lat();
    							longitude = results[0].geometry.location.lng();
     
    							document.getElementById('bidouille').innerHTML +="L'addresse "+Lieu[Val] +" peut avoir ces coordonnées " +latitude+ " "+ longitude+" <a href='http://maps.google.fr/maps?q=" +latitude+ "+"+ longitude+"&spn=0.010626,0.022724&sll=46.75984,1.738281&sspn=10.794142,23.269043&t=h&z=16' target='_blank'>Voir</a><br />";
    							 } else {
    							  alert("Le geocodage n\'a pu etre effectue pour la raison suivante: " + status);
    							 }
    							});
     
    				}

  9. #9
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 120
    Points : 44 917
    Points
    44 917
    Par défaut
    [J'ai trouvé ceci : http://t-templier.developpez.com/tut...ipt-poo1/#L2.3

    Ca te parait être un bon tuto pour apprendre?
    tout à fait.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    geocoder.geocode( { 'address': Lieu[Val]}, function(results, status)
    tu as déjà oublié qu'il te faut passer une String à address
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    geocoder.geocode({'address': Lieu[Val]['endroit']}, function (results, status)
    remets un peu d'ordre dans tes codes...


    au passage, j'ai oublié de te signaler que tes longitudes sont des latitudes et inversement
    http://fr.wikipedia.org/wiki/Coordon...%A9ographiques

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

Discussions similaires

  1. If dans une boucle For : effectuer un next
    Par Freud44 dans le forum Général VBA
    Réponses: 2
    Dernier message: 29/01/2011, 21h42
  2. Réponses: 2
    Dernier message: 07/06/2010, 14h19
  3. [débutant] Actions dans une boucle non effectuées
    Par Diegoooowwww dans le forum Caml
    Réponses: 10
    Dernier message: 31/12/2008, 19h56
  4. effectuer une pause dans une boucle
    Par guiguizekid dans le forum Tkinter
    Réponses: 4
    Dernier message: 30/12/2008, 20h39
  5. Effectuer une boucle (foreach) dans une procédure stockée ?!
    Par Danny Blue dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 16/11/2007, 16h02

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