2009-09-18 10 views
2

J'ai une carte Google dans mon site et y joindre gestionnaire d'événements de MoveEndopeninfowindowhtml sur la carte google après récupérer les informations du serveur

GEvent.addListener(map, "moveend", function() 
    { 
      map.clearovrelays(); 
      GetLayerDataFromServer(); //it set the markers again on the map according the map position 
    }); 

et aussi je gestionnaire d'événements pour un clic sur le marqueur

GEvent.addListener(marker, 'click', function() 
    { 
     marker.openInfoWindowHtml('this is the data'); 
    }); 

Mon problème est

Lorsque l'utilisateur appuie sur l'un des marqueurs sur la carte il ouvre la openInfoWindowHtml du marqueur associé.

Et il déplace également la carte vers cette position de marqueur. Et puis il déclenche l'événement

map.moveend 

Et en cas map.moveend je suis clair tout le marqueur sur la carte et les rechargent selon la carte nouvelle position.

Le résultat est que lorsque l'utilisateur clique sur le marqueur ouvert pour la deuxième son indoWindowHtml et il efface la carte et charge les marqueurs à nouveau, sans montrer l'indoWindowHtml du marqueur cliquée.

Ma question est ce que je dois faire pour afficher infoWindowHtml?

Répondre

1

Vous pouvez définir un indicateur qui indique si l'utilisateur a cliqué sur un marqueur et ne pas effacer la carte si c'est le cas.

var marker_clicked = false; 

GEvent.addListener(map, "moveend", function() 
{ 
    if(!marker_clicked) 
    { 
     map.clearovrelays(); 
     GetLayerDataFromServer(); //it set the markers again on the map acording the map position 
    } 
    marker_clicked = false; 
}); 

GEvent.addListener(marker, 'click', function() 
{ 
    marker_clicked = true; 
    marker.openInfoWindowHtml('this is the data'); 
}); 
+0

ok , mais je veux que GetLayerDataFromServer se produira parce que je veux obtenir les marqueurs pour la carte nouvelles coordonnées – avi

+0

@avi: puis déplacez le GetLayerDataFromServer() en dehors de la clause if. – NickFitz

0

Une stratégie alternative possible est d'ouvrir votre fenêtre d'information avec {suppressMapPan: true} qui indique la carte de ne pas effectuer un panoramique lorsque le infowindow ouvre. De cette façon, vous savez que les mouvements de carte sont de vrais mouvements de carte par l'utilisateur.

Attention: {suppressMapPan: true} n'est pas documenté, donc il pourrait éventuellement disparaître dans une future version.

0

Une autre stratégie serait d'écrire

GEvent.addListener(marker, 'click', function() 
    { 
     var iwAnchor = marker.getIcon().infoWindowAnchor; 
     var iconAnchor = marker.getIcon().iconAnchor; 
     var offset = new GSize(iwAnchor.x-iconAnchor.x,iwAnchor.y-iconAnchor.y); 
     map.openInfoWindowHtml(marker.getLatLng(),'this is the data',{pixelOffset:offset}); 
    }); 

puis au lieu d'appeler clearOverlays(), boucle à travers vos marqueurs un par un les enlever.

En ouvrant l'infowindow sur la carte au lieu du marqueur, il ne se ferme pas automatiquement lorsque le marqueur est retiré. L'infowindow est maintenant un overlay, donc clearOverlays le supprime, donc vous ne pouvez pas utiliser clearOverlays. Il peut sembler inefficace de faire défiler vos marqueurs en les supprimant un à un, mais clearOverlays fait une boucle très similaire en interne. Les calculs iconAnchor ci-dessus positionnent simplement l'infowindow au même endroit que si vous aviez utilisé marker.openInfowindowHtml, plutôt qu'au pied du marqueur.

Questions connexes