2010-12-10 24 views
0

Je travaille actuellement sur un projet ASP.NET où j'utilise l'API Google Maps pour afficher un marqueur pour chaque entreprise enregistrée dans la base de données.JavaScript Bogue marqueur de carte Google

Tout fonctionne très bien, mais lorsque je clique sur un marqueur, l'info-bulle/boîte de dialogue de la dernière société de ma liste d'entreprises s'affiche toujours et non la marque de société sur laquelle j'ai cliqué.

Je n'arrive pas vraiment à comprendre pourquoi c'est toujours le dernier marqueur qui apparaît. Voici mon mis à jour Code:

JavaScript.Text = @"<script type='text/javascript'> 
        function load() { 
        if (GBrowserIsCompatible()) { 
        var map = new GMap2(document.getElementById('map')); 
        map.setCenter(new GLatLng(56.4, 10.57983), 9); 
        map.enableScrollWheelZoom(); 

        } 
       } 
     </script> "; 

    foreach (MemberProfile m in relatedMembers) 
    { 
     XmlDocument doc = new XmlDocument(); 

     string address = m.Address; 
     string zip = m.Zip; 
     string city = m.City; 
     string navn = m.Name; 
     string tlf = m.Phone; 

     doc.Load("http://maps.googleapis.com/maps/api/geocode/xml?address=" + zip + "+" + city + "+" + address + "+DK&sensor=true&key=ABQIAAAAEaY4JLb9fZFGMlDKuMUlWBRSvyGIkBO7X03pzlT7Z30EPXHR8BS0rXL_ShFm2gc79lZTw2Zak88wng"); 

     XmlNode latNode = doc.SelectSingleNode("GeocodeResponse/result/geometry/location/lat/text()"); 
     XmlNode lonNode = doc.SelectSingleNode("GeocodeResponse/result/geometry/location/lng/text()"); 

     if (latNode != null && lonNode != null) 
     { 
      JSAddMarkers.Text += @"<script type='text/javascript'> 
           var marker = new GMarker(new GLatLng(" + latNode.Value + "," + lonNode.Value + ")); " 
          + "var html = '<b>" + navn + "</b><br />" + address + "<br /> " + zip + " " + city + "<br />" + tlf + "'; " + "GEvent.addListener(marker, 'click', function() { marker.openInfoWindowHtml(html); });" 
          + "map.addOverlay(marker);" 
          + "</script>"; 
     } 

Si l'un de vous là-bas peut repérer la raison pour laquelle, je serais heureux de vous entendre! Toute aide/indice est apprécié :-)

Tous les meilleurs,

Bo

+0

Je suppose que le pépin est dans l'ordre de création objet de la carte et l'ajout de marqueurs sur il. Vous devez d'abord créer l'objet map, puis exécuter la boucle pour y ajouter des marqueurs. –

+0

Hmm, je suppose que vous avez raison sur celui-ci! Je vais mettre à jour mon premier message avec mon nouveau code où j'ai déplacé la création de la carte au-dessus de la boucle foreach. Il n'y a pas de marqueur visible sur la carte:/Peut-être que j'ai manqué quelque chose le long de la route .. – bomortensen

+0

Je n'ai toujours pas trouvé de solution :(J'ai essayé de refactoriser mon code beaucoup de sorte qu'il en sort un snippet avec tout – bomortensen

Répondre

0

essayer cette

var point =new GLatLng(" + latNode.Value + "," + lonNode.Value + "); 
var marker = createMarker(point, address,zip,city,navn); 
map.addOverlay(marker); 



function createMarker(point, address, zip,city, navn) { 
     var marker = new GMarker(point, customIcons[type]); 
     var html = "Address:<b style='padding-left:6px'>" + address+ "</b><br/>zip:<b style='padding-left:6px'>"+ zip+ "</b><br/>city:<b style='padding-left:6px'>"+ city+ "</b>"; 
     GEvent.addListener(marker, 'mouseover', function() { 
     marker.openInfoWindowHtml(html); 
     }); 
     GEvent.addListener(marker, "mouseout", function() { 
       marker.closeInfoWindow(); 
    }); 
     return marker; 
    } 
+0

Salut Bhanu, c'est aussi un moyen de le faire, mais comme je travaille avec le codage ninja javascript dans C# codebehind, il semble que je J'ai un peu de mal à faire fonctionner ton code:/Jamais vraiment travaillé avec javascript dans codebehind avant, alors laisse moi avec moi .. – bomortensen