Page 1 sur 1

Blocage Google maps api

Publié : 20 mars 2009, 16:30
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

Publié : 21 mars 2009, 09:37
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 

Publié : 23 mars 2009, 14:14
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