Google Maps Spiderfying Markers & Adding Listeners

J'essaie de Spiderfy mes marqueurs et d'y ajouter des auditeurs. Le Spidefying fonctionne bien, cela signifie que j'obtiens les marqueurs superposés spiderfied mais le problème est que je ne peux pas imaginer comment ajouter des auditeurs à ces marqueurs. En d'autres termes, j'ai essayé ce qui suit:

  • Mettre oms.addListener() dans une boucle. De cette façon, en cliquant sur un marqueur, vous ouvrez toutes les infoWindow sur le même marqueur, ce qui n'est pas délicieux.
  • Mettre oms.addListener() dehors de la boucle comme l'exemple sur le poste de travail OMS Git. Https://github.com/jawj/OverlappingMarkerSpiderfier/blob/gh-pages/demo.html . De cette façon, tous les marqueurs ont la même infoWindow qui est la dernière de la boucle.

C'est mon code:

 var iw = new google.maps.InfoWindow(); var oms = new OverlappingMarkerSpiderfier(carte, {keepSpiderfied:true}); oms.addListener('click', function(marker){ iw.setContent(content); iw.open(carte, marker); }); var markers =[]; var bounds = new google.maps.LatLngBounds(); if (response.length != 0) { for (var i = 0 ; i < response.length; i++) { var loc = new google.maps.LatLng(response[i].latlong[0], response[i].latlong[1]); bounds.extend(loc); var lemarqueur = new google.maps.Marker({ position: loc, title: response[i].title }); content = '<table><tr><td><img src="' +response[i].image+'"/></td><td><p style="font-size: 13px">' +response[i].title+'</p> <p style="font-size: 10px"><b>Artists:</b> ' +response[i].artist+'<br><b>Date:</b> '+response[i].startDate+'<br>' +response[i].address.name +' '+response[i].address.street + '<br>' +response[i].address.postalcode +', '+response[i].address.city +', ' +response[i].address.country +'<br><a target="_blank" href =' +response[i].url+'>More info</a></p></td></tr></table>'; oms.addMarker(lemarqueur); markers.push(lemarqueur); }; carte.fitBounds(bounds); var markerCluster = new MarkerClusterer(carte, markers); markerCluster.setMaxZoom(15); markerCluster.setGridSize(40); google.maps.event.addDomListener(window, 'load', initialiser); 

Alors, j'aimerais savoir où placer le bloc addListener() ?

C'est ce que j'ai utilisé avant en boucle, en utilisant google.maps.event.addListener() , qui a bien fonctionné:

 google.maps.event.addListener(lemarqueur, 'click', function() { InfoWindow.open(carte, lemarqueur); }); 

J'espère que la question est assez claire,
Merci d'avance.

oms.addListener() n'agit pas de la même manière que google.maps.event.addListener() . Je l'ai donc fait fonctionner en utilisant l'original google.maps.event.addListener() au lieu de oms.addListener() dans une boucle for . Ainsi:

 var infoWindows = []; function closeInfoWindows(){ var i = infoWindows.length; while(i--){ infoWindows[i].close(); } } function newMarker(map, response, oms){ var loc = new google.maps.LatLng(response.latlong[0], response.latlong[1]); var marker = new google.maps.Marker({ position: loc, title: response.title }); oms.addMarker(marker); var WindowOptions = { content:'some desc...'}; var InfoWindow = new google.maps.InfoWindow(WindowOptions); infoWindows.push(InfoWindow); google.maps.event.addListener(marker, 'click', function() { closeInfoWindows(); InfoWindow.open(carte, marker); // or this instead of marker }); return marker; } for (var i = 0 ; i < response.length; i++) { markers.push(newMarker(map, response[i], oms)); }; 

Crédit supplémentaire à: geocodezip et Toutes les infowindows ont les mêmes données

Un exemple de travail peut être trouvé ici (mon site web): concert-dacote.com

Voici une autre approche pour ajouter des auditeurs à vos marqueurs spiderfiered avec NO FOR LOOP NECESSAIRE :

 var oms = new OverlappingMarkerSpiderfier (...) ; // Create this function function addClickListenerToMarker(marker, onClickListener) { oms.addListener('click', function (markerArg, eventArg) { if (marker == markerArg) onClickListener(marker, eventArg); }); } // Add a click listener to your marker var myMarker = ... addClickListenerToMarker(myMarker, function (marker, event) { alert('I have been clicked'); });