Partage
  • Partager sur Facebook
  • Partager sur Twitter

[API Google Maps] : "Regrouper" des markers ?

    14 mai 2010 à 16:47:53

    Bonjour à tous,

    Ma google maps (qui utilise la V3 de l'API) affiche dynamiquement un grand nombre de points (environ 400) chargés depuis un fichier xml.

    Sous firefox, tous les points s'affichent presque instantanément, tandis que sous IE, ils s'affichent un par un...autant dire que c'est long et problématique, d'autant plus qu'à l'affichage, c'est un peu le boxon.

    Au final, voici à quoi ressemble la map :

    Image utilisateur

    Quand on zoom :

    Image utilisateur

    Afin d'avoir un affichage beaucoup plus lisible, existe t'il un moyen de "regrouper" les amas de points ?

    Par exemple : serait t'il possible de créer par exemple 1 marqueur pour chaque département, puis de les afficher progressivement lors du zoom ?
    • Partager sur Facebook
    • Partager sur Twitter
      14 mai 2010 à 17:19:19

      Tu places tes points comment ?

      Ne connaissant pas GM Api j'aurais du mal a t'aider, mais si tu connais les coordonnées de chaque marqueurs, tu peux les regrouper facilement
      • Partager sur Facebook
      • Partager sur Twitter
        14 mai 2010 à 17:40:11

        en gros ça donne un truc du genre :

        for (var i = 0; i < markers.length; i++) {
        		   
        		   
        	
               	    
                    var name = markers[i].getAttribute("name");
                    var contenu = markers[i].getAttribute("contenu");
                    var gps_lat = markers[i].getAttribute("gps_lat");
                
                    var gps_long = markers[i].getAttribute("gps_long");
                   
                   var point = new google.maps.LatLng(
                        parseFloat(gps_lat),
                        parseFloat(gps_long)
                   );
        
                      
        
                    var marker = new google.maps.Marker({
                        position: point,
        		map: map,
                        icon: images,
        		title: name
                    });
        
        • Partager sur Facebook
        • Partager sur Twitter
          14 mai 2010 à 17:47:49

          Ne connaissant pas google map, est-ce que t'aurais une fonction / variable pour connaître l'échelle d'affichage actuel ?
          • Partager sur Facebook
          • Partager sur Twitter
            14 mai 2010 à 17:51:48

            oui, l'API fournit une méthode getZoom() (qui permet de savoir sur quel niveau de zoom on se situe)
            • Partager sur Facebook
            • Partager sur Twitter
              14 mai 2010 à 17:56:10

              var scale = 0.5;
              var points = {};
              
              for (var i = 0; i < markers.length; i++) {
              	var gps_lat = markers[i].getAttribute("gps_lat");
              	var gps_long = markers[i].getAttribute("gps_long");
              	
              	gps_lat = Math.round(gps_lat / scale) * scale;
              	gps_long = Math.round(gps_long / scale) * scale;
              	
              	points[gps_lat + 'x' + gps_long] = [gps_lat, gps_long, markets[i]];
              }
              
              for (var i in points) {
              	if (points.hasOwnProperty(i)) {
              		var pt = points[i][2];
              		
              		var name = pt.getAttribute("name");
              		var contenu = pt.getAttribute("contenu");
              		
              		var gps_lat = points[i][0];
              		var gps_long = points[i][1];
              		
              		var point = new google.maps.LatLng(
              			parseFloat(gps_lat),
              			parseFloat(gps_long)
              		);
              		
              		
              		var marker = new google.maps.Marker({
              			position: point,
              			map: map,
              			icon: images,
              			title: name
              		});
              	}
              }
              


              Tu peux utiliser un code de ce style, en faisant varier scale en fonction getZoom()

              (J'ai mis 0.5 au hasard)
              • Partager sur Facebook
              • Partager sur Twitter
                14 mai 2010 à 18:05:43

                je sors du boulot, je testerais ton code lundi.
                Merci en tout cas ;)
                • Partager sur Facebook
                • Partager sur Twitter
                  14 mai 2010 à 18:09:15

                  Je t'ai trouvé un petit truc qui m'a l'air bien sympa, markerclusterer :
                  http://googlegeodevelopers.blogspot.co [...] too-many.html
                  • Partager sur Facebook
                  • Partager sur Twitter

                  [API Google Maps] : "Regrouper" des markers ?

                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                  • Editeur
                  • Markdown