Blocage Google maps api

HTML5, CSS3, Javascript, support des mobiles... Que penser de votre site ? Vous manquez d'informations pour la construction d'un site qui puisse s'afficher correctement partout ? C'est un problème simple, un peu complexe ? Venez ici !
gus_air

Blocage Google maps api

Message par gus_air »

Bonjour, je débute sur les API googlemap et suis bloqué.
En fait je cherche à placer sur une carte des marqueurs récupérés dans une base mysql.
Certains ont seulement une adresse donc 'geocoder.getLatLng', pas de souci. Mais d'autres point ont en plus des coordonnées (lat, lng).
Pour un souci de rapidité, je souhaiterais qu'il se base sur (lat, lng) pour ceux qui en ont et (adresse) pour ceux qui n'en n'ont pas. J'espère que c'est pas trop confu. Voici mon code et merci de votre aide.

Code : Tout sélectionner

function load() {
  if (GBrowserIsCompatible()) {
    map = new GMap2(document.getElementById("map"));
    geocoder = new GClientGeocoder();
    
    function createMarkersEtbl(i) {
      var coordonees = etbl[i][4];
      if (coordonees) {
        var point = new GLatLng(coordonees);
        alert(point);
        var marker=(new GMarker(point));
        batchEtbl.push(marker);
        var infoTabs = [
          new GInfoWindowTab("Adresse", ('<span class=a-resultats-menu><?echo $texte_resultats["text23"] ?>'+etbl[i][3]+'<? echo "&nbsp;" ?>'+etbl[i][1]+'<? echo "<br><br><\/span><a href='+etbl[i][2]+' class=resultats-menu>" ?>'+etbl[i][1]+'<\/a>')),
        ];
        GEvent.addListener(marker, "mouseover", function() {
          marker.openInfoWindowTabsHtml(infoTabs);
        });
        GEvent.addListener(marker, "click", function() {
          window.location.href = etbl[i][2];
        });
        if (i+1<etbl.length) {
          createMarkersEtbl(i+1);
        } else {
          mgr.addMarkers(batchEtbl, 5);
          mgr.refresh();
        }
      } else {
        if (geocoder) {
          geocoder.getLatLng(etbl[i][0], function(point) {
          if (point) {
            var marker=new GMarker(point);
            batchEtbl.push(marker);
            var infoTabs = [
              new GInfoWindowTab("Adresse", ('<span class=a-resultats-menu><?echo $texte_resultats["text23"] ?>'+etbl[i][3]+'<? echo "&nbsp;" ?>'+etbl[i][1]+'<? echo "<br><br><\/span><a href='+etbl[i][2]+' class=resultats-menu>" ?>'+etbl[i][1]+'<\/a>')),
            ];
            GEvent.addListener(marker, "mouseover", function() {
              marker.openInfoWindowTabsHtml(infoTabs);
            });
            GEvent.addListener(marker, "click", function() {
              window.location.href = etbl[i][2];
            });
          }
          if (i+1<etbl.length) {
            createMarkersEtbl(i+1);
          } else {
            mgr.addMarkers(batchEtbl, 5);
            mgr.refresh();
          }
          });
        }
      }
    }
    
    map.setCenter(new GLatLng(48.9, 2.3), 5);
    map.addControl(new GMapTypeControl());
    map.addControl(new GSmallMapControl());
    map.enableScrollWheelZoom();
    map.addControl(new GOverviewMapControl());
    map.addControl(new GScaleControl());
    centrecarte(address);
    createMarkersEtbl(0);//lancement de la fonction permettant de créer les markers des pays
    mgr = new GMarkerManager(map);//on créer un marker manager//création d'un manager de marker
  }
}
Message envoyé avec : Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.1.20) Gecko/20081217 Firefox/2.0.0.20
Benoit
Administrateur
Messages : 4894
Inscription : 19 juil. 2003, 10:59

Message par Benoit »

J'ai reformaté ton code qui était totalement illisible.

Bon, d'abord on ne voit pas où sont déclarées les variables etbl et batchEtbl, je suppose que ce sont des variables globales et que ça ne pose pas de problème.

Le premier problème que je vois c'est que tu utilises la variable mgr dans la fonction createMarkersEtbl, mais tu ne l'initialises que juste après avoir appelé cette fonction. Essaie donc d'inverser ces deux lignes :

Code : Tout sélectionner

mgr = new GMarkerManager(map);//on créer un marker manager//création d'un manager de marker
createMarkersEtbl(0);//lancement de la fonction permettant de créer les markers des pays 
♫ Li tens s'en veit, je n'ai riens fais ;
Li tens revient, je ne fais riens. ♪
gus_air

Message par gus_air »

Bonjour et merci de ta réponse.
C'est vrai que je n'avais pas mis la totalité du code. J'ai entre temps un peu modifié mon code, je vais le nouveau en ligne :

Code : Tout sélectionner

<script type="text/javascript">
//déclaration des variables
var map = null;
var mgr= null;
var batchEtbl=[];//ce tableau stockera les markers des adresses
var etbl = [];


var address ='<? echo str_replace("-", " ", supprime_accents($lieu))." ".$pays ?>';
var zoom = <? echo $zoom ?>;
     function centrecarte(address) {
      if (geocoder) {
        geocoder.getLatLng(
          address,
           function(point) {
           if (!point) {
           var address ='france';
            } else {
              map.setCenter(point, zoom);
            }
           }
      );
     }
   }
// FIN CENTRAGE CARTE
function load() {
  if (GBrowserIsCompatible()) {
	map = new GMap2(document.getElementById("map"));
	geocoder = new GClientGeocoder();
	map.setCenter(new GLatLng(48.9, 2.3), 5);
	map.addControl(new GMapTypeControl());
	map.addControl(new GSmallMapControl());
	map.enableScrollWheelZoom();
	map.addControl(new GOverviewMapControl());
	map.addControl(new GScaleControl());
	centrecarte(address);
	mgr = new GMarkerManager(map);//on créer un marker manager//création d'un manager de marker
	createMarkersEtbl(0);//lancement de la fonction permettant de créer les markers des pays
  }
}

function createMarkersEtbl(i) {
var coordonees = etbl[i][4];
if (coordonees) {
	var point = new GLatLng(coordonees);
	alert(point);
	var marker=(new GMarker(point));
	map.addOverlay(marker);
	var infoTabs = [
	new GInfoWindowTab("Adresse", ('<span class=a-resultats-menu><?echo $texte_resultats["text23"] ?>'+etbl[i][3]+'<? echo "&nbsp;" ?>'+etbl[i][1]+'<? echo "<br><br><\/span><a href='+etbl[i][2]+' class=resultats-menu>" ?>'+etbl[i][1]+'<\/a>')),
	];
	GEvent.addListener(marker, "mouseover", function() {
	marker.openInfoWindowTabsHtml(infoTabs);
	});
	GEvent.addListener(marker, "click", function() {
	window.location.href = etbl[i][2];
	});  
	if (i+1<etbl.length) {
	createMarkersEtbl(i+1);
	} else {
	mgr.addMarkers(batchEtbl, 5);
	mgr.refresh();
	}
} else {
	if (geocoder) {
		geocoder.getLatLng(etbl[i][0], function(point) {
			if (point) {
				var marker=new GMarker(point);
				map.addOverlay(marker);
				var infoTabs = [
				new GInfoWindowTab("Adresse", ('<span class=a-resultats-menu><?echo $texte_resultats["text23"] ?>'+etbl[i][3]+'<? echo "&nbsp;" ?>'+etbl[i][1]+'<? echo "<br><br><\/span><a href='+etbl[i][2]+' class=resultats-menu>" ?>'+etbl[i][1]+'<\/a>')),
				];
				GEvent.addListener(marker, "mouseover", function() {
				marker.openInfoWindowTabsHtml(infoTabs);
				});
				GEvent.addListener(marker, "click", function() {
				window.location.href = etbl[i][2];
				});     
			}
			if (i+1<etbl.length) {
			createMarkersEtbl(i+1);
			} else {
			mgr.addMarkers(batchEtbl, 5);
			mgr.refresh();
			}
		});
	}
}
}
Sachant que je génére avant un tableau 'etbl[]' à l'aide d'une base mysql.
De cette facon, la carte m'affiche sans souci les marqueur générés avec 'geocoder.getLatLng(adresse)', par contre elle m'affiche les marqueurs avec coordonées mais pas au bon endroit avec une grosse différence.
Si quelqu'un pouvait m'éclairer ca serait sympa car la je sèche, merci

Message envoyé avec : Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.1.20) Gecko/20081217 Firefox/2.0.0.20
Répondre

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 4 invités