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: problème pour ajouter un marker [Google Maps]


Sujet :

APIs Google

  1. #1
    Membre du Club
    Inscrit en
    Juillet 2007
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 98
    Points : 41
    Points
    41
    Par défaut API v3: problème pour ajouter un marker
    Bonjour
    Je suis en train de creer ma premiere carte avec Google Maps. voila mon code en un seul fichier
    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
    <html>
    <head>
    <title>Read XML Data 2011 </title>
     <script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false">
     </script>
     
      <script type="text/javascript"> 
    // .......................................................
     var icon_National = 'National.png';
     function initialize() {    
     
               var myOptions = 
    		   {
               zoom: 11,
               center: new google.maps.LatLng(45.509944,-73.820907),
               mapTypeId: google.maps.MapTypeId.ROADMAP           }
               var map = new google.maps.Map(document.getElementById("map_canvas"),
                                      myOptions);
         };
     
     // ............................................
        var xmlText  = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
            xmlText += "<shape>\n";
            xmlText += "  <point rcnumber=\"56413\" lat=\"45.5041\"  lng=\"-73.82003\" />\n";
            xmlText += "  <point rcnumber=\"76562\" lat=\"45.50541\" lng=\"-73.82021\" >\n"; 
            xmlText += "  </point>\n";
            xmlText += "</shape>\n";
     
        if (window.ActiveXObject) { // Internet Explorer
          x = new ActiveXObject("Microsoft.XMLDOM");
          x.async = false;
          x.loadXML(xmlText);
        }
        else if (window.DOMParser) { // Autres
            var p = new DOMParser();
            x = p.parseFromString(xmlText, "text/xml");
        }
        else {
     
        }
     
     
        if (x) {
          var myLine = x.getElementsByTagName("point");
     
    	   var cc= new Array;
    	   var x= new Array;
    	   var y=new Array;
    	   var txt=new Array;
    	   var latLon;
     
     
          for (i=0; i<myLine.length; i++) {
    	    cc[i]= myLine[i].getAttribute("rcnumber");
    		x[i]=  myLine[i].getAttribute("lng");
    		y[i]=  myLine[i].getAttribute("lat");
    		latLong =new google.maps.LatLng(x[i],y[i]); 	  
    		alert ("latLong: "+latLong);
     
         }
     
    	var MonMarker =  createMyMarker(icon_National,latLong);
        }
     
     
     // .......................................................
    //
     function createMyMarker(image,LatitudeLongitude){
    		alert("Je suis dans la fonction Creer Marker");	
    	    var marker = new google.maps.Marker({
                          position: LatitudeLongitude, 
                          map: map,
                          icon: image 
        });
          return marker;
       }
     
    </script>
     
    </head>
    <body onload="initialize()" >
        <div id="map_canvas" style="width: 65%; height: 80%"></div>
      </body>
    </html>
    Je lis mes données à partir d'un fichier XML. Je voudrais ajouter des markeurs personnalisés (les icon_National dans mon fichier).
    Seulement, cels ne fonctionne pas.
    Quelqu'un pourrait avoir une idée sur le pourquoi?
    Merci.
    Bonne soirée
    Abel

  2. #2
    Membre confirmé Avatar de kohsaka
    Homme Profil pro
    Intégrateur HTML / Developpeur .NET
    Inscrit en
    Janvier 2007
    Messages
    383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Intégrateur HTML / Developpeur .NET

    Informations forums :
    Inscription : Janvier 2007
    Messages : 383
    Points : 469
    Points
    469
    Par défaut
    Ton point est peut être bien créé, mais il ne me semble pas que tu l'affiches sur la map.

    une fois créé, il faut que tu l'ajoutes à ta map avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
            // afficher le marker sur la map
            monMarker.setMap(map);

  3. #3
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 959
    Points : 44 122
    Points
    44 122
    Par défaut
    Bonjour,
    bien des choses à dire sur ton code et je ne sais trop par quoi commencer.
    - bien indenter un code permet d'y voir plus clair.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    function initialize(){    
      var myOptions =  { 
        zoom: 11,
        center: new google.maps.LatLng(45.509944,-73.820907),
        mapTypeId: google.maps.MapTypeId.ROADMAP
      }
      var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
    };
    la déclaration et l'affectation de ta variable map en fait une variable locale, non visible par les autres fonctions donc non utilisable, le problème est qu'il faut attacher tes marqueurs à cette map, donc à mettre en global puisqu'utilisée dans la fonction createMyMarker

    - bien nommer ces variables évites de s'emmêler les pinceaux dans lors de leur utilisation

    la méthode LatLng attend en paramètre la latitude PUIS la longitude et pas l'inverse
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    x[i] = myLine[i].getAttribute("lng");
    y[i] = myLine[i].getAttribute("lat");
    latLong = new google.maps.LatLng(x[i], y[i]);
    il serait préférable d'écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    lon[i] = myLine[i].getAttribute("lng");      
    lat[i] = myLine[i].getAttribute("lat");      
    latLong = new google.maps.LatLng( lat[i], lon[i]);
    moins de chance de ce tromper

    concernant la boucle de création de tes marqueurs le HIC est que tu ne crées qu'un marqueur en dehors de la boucle

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    for( i = 0; i < myLine.length; i++) {
      cc[i] = myLine[i].getAttribute("rcnumber");
      x[i] = myLine[i].getAttribute("lng");
      y[i] = myLine[i].getAttribute("lat");
      latLong = new google.maps.LatLng(x[i], y[i]);
      alert("latLong: " + latLong);
    }
    var MonMarker = createMyMarker(icon_National, latLong);
    je pense que ce que tu voulais faire c'est créer autant de marqueurs que tu as d'enregistrements, donc il est préférable d'écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
      var lat = [];
      var lon = [];
      var latLong;
      var MonMarker;
      var i, nb = myLine.length;
      for( i = 0; i < nb; i++) {
        cc[i] = myLine[i].getAttribute("rcnumber"); // ne sert pas!!!    
        lon[i] = myLine[i].getAttribute("lng");      
        lat[i] = myLine[i].getAttribute("lat");
        latLong = new google.maps.LatLng( lat[i], lon[i]);      
        MonMarker = createMyMarker( icon_National, latLong);
      }
    - rien ne sert de créer une fonction qui ne sera appelée que par une fonction
    autant la mettre directement à l'intérieure de celle ci, dans ton cas il s'agit de la fonction createMyMarker que tu peux mettre directement dans la boucle en simplifiant légèrement l'écriture
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
      var lat = [];
      var lon = [];
      var marker;
      var i, nb = myLine.length;
      for( i = 0; i < nb; i++) {
        lon[i] = myLine[i].getAttribute("lng");
        lat[i] = myLine[i].getAttribute("lat");
        marker = new google.maps.Marker({
          position : new google.maps.LatLng( lat[i], lon[i]),
          map : map,
          icon : 'National.png'
        });
      }
    - bien structurer l'enchainement des fonctions
    comme la partie du code ci dessus s'exécute avant la création de la map, function initialize sur le onload du body, cela va planter irrémédiablement.
    Dans ce cas autant tout mettre dans la fonction initialize, au final tu pourrais avoir ceci
    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
    function initialize() {
      var myOptions = {
        zoom: 11,
        center: new google.maps.LatLng(45.509944, -73.820907),
        mapTypeId: google.maps.MapTypeId.ROADMAP
      };
     
      var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
      // ............................................
      var xmlText = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
      xmlText += "<shape>\n";
      xmlText += "  <point rcnumber=\"56413\" lat=\"45.5041\"  lng=\"-73.82003\" />\n";
      xmlText += "  <point rcnumber=\"76562\" lat=\"45.50541\" lng=\"-73.82021\" >\n";
      xmlText += "  </point>\n";
      xmlText += "</shape>\n";
     
      if (window.ActiveXObject) { // Internet Explorer
        x = new ActiveXObject("Microsoft.XMLDOM");
        x.async = false;
        x.loadXML(xmlText);
      } else if (window.DOMParser) { // Autres
        var p = new DOMParser();
        x = p.parseFromString(xmlText, "text/xml");
      }
     
      if (x) {
        var myLine = x.getElementsByTagName("point");
        var lat = [];
        var lon = [];
        var marker;
        var i, nb = myLine.length;
        for( i = 0; i < nb; i++) {
          lon[i] = myLine[i].getAttribute("lng");
          lat[i] = myLine[i].getAttribute("lat");
          marker = new google.maps.Marker({
            position : new google.maps.LatLng( lat[i], lon[i]),
            map : map,
            icon : 'National.png'
          });
        }
      }
    }
    Il doit bien rester une ou deux remarques mais le plus gros est fait.

    Je ne parlerais pas du pseudo XML, qui ne m'apparait pas nécessaire, mais je ne connais pas ta motivation, la création d'un objet me semble à priori plus adéquat voir un exemple de déclaration.

  4. #4
    Membre du Club
    Inscrit en
    Juillet 2007
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 98
    Points : 41
    Points
    41
    Par défaut Résolu
    Bonjour kohsaka et NoSmoking et tous les autres.

    Merci beaucoup pour vos réponses.

    NoSmoking j'apprécie les commentaires très utiles.
    J'enchaine avec une question qui pourrait interesser d'autres . Donc, je la pose dans un thread à part.
    Merci encore.
    Abel

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

Discussions similaires

  1. Problème pour ajouter un language
    Par Anubis dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 11/09/2007, 15h41
  2. Problème pour ajouter à la palette
    Par cline1263 dans le forum NetBeans
    Réponses: 3
    Dernier message: 18/07/2007, 13h23
  3. [MySQL] Encore problème pour ajouter un utilisateur !
    Par Panther dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 13/03/2007, 09h19
  4. Problème pour ajouter un texte automatique dans un zone de saisie de texte
    Par koKoTis dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 21/08/2006, 16h03
  5. Réponses: 1
    Dernier message: 21/02/2006, 15h46

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