2013-12-10 15 views
11

Sto usando MarkerClusterer. Quando ho due o più marcatori sullo stesso identico punto, l'API mostra solo 1 marcatore - quello superiore. Ma in qualche modo voglio mostrare tutti i marcatori poiché ognuno aprirà un popup distinto. Ho cercato poche soluzioni ma nessuna sembra funzionare Qualcuno ha avuto problemi simili e avrebbe condiviso una soluzione?Più di un marker sullo stesso posto - MarkerClusterer

+2

possibile duplicato [Integrazione Spiderfier JS in markerClusterer V3 esplodere multi-marcatori con esattamente lo stesso lungo/lat] (http://stackoverflow.com/questions/9726920/integrating-spiderfier-js-into-markerclusterer -v3-to-explode-multi-markers-with) – geocodezip

+1

@geocodezip c'è un modo per farlo funzionare senza usare OverlappingMarkerSpiderfier in quanto non soddisfa la necessità. Mostrare entrambi i segnalini con poco spazio solo per sapere che ci saranno due o più segnalini. Grazie. – Grish

+0

Ovviamente c'è. Basta codificarlo per farlo. O modificare i dati di input in modo che non ci siano duplicati. – geocodezip

risposta

23

Finalmente ha funzionato. Questo è per tutti coloro che non hanno ancora trovato una soluzione. Sotto codice aggiunge compensato ai marcatori sulla stessa posizione:

Nella funzione createMarker aggiungere questo codice:

//get array of markers currently in cluster 
var allMarkers = namespace.mapParams.mapMarkersArray; 

//final position for marker, could be updated if another marker already exists in same position 
var finalLatLng = latlng; 

//check to see if any of the existing markers match the latlng of the new marker 
if (allMarkers.length != 0) { 
    for (i=0; i < allMarkers.length; i++) { 
     var existingMarker = allMarkers[i]; 
     var pos = existingMarker.getPosition(); 

     //if a marker already exists in the same position as this marker 
     if (latlng.equals(pos)) { 
      //update the position of the coincident marker by applying a small multipler to its coordinates 
      var newLat = latlng.lat() + (Math.random() -.5)/1500;// * (Math.random() * (max - min) + min); 
      var newLng = latlng.lng() + (Math.random() -.5)/1500;// * (Math.random() * (max - min) + min); 
      finalLatLng = new google.maps.LatLng(newLat,newLng); 
     } 
    } 
} 

Refer this

ora aggiornare il vostro oggetto google.maps.Marker per ogni marcatore con il nuovo valore di posizione - finalLatLng.

var marker = new google.maps.Marker({ 
    map: msf_namespace.mapParams.resultmap, 
    position: finalLatLng, 
    title: name, 
    icon: markericon 
}); 

//add each generated marker to mapMarkersArray 
namespace.mapParams.mapMarkersArray.push(marker); 
+2

Preferisco di gran lunga il tuo metodo rispetto al trucco di spidering, ma mi chiedo quanti marcatori stai lavorando e se hai notato un rallentamento del posizionamento? – ow3n

+0

attualmente circa cento e nessun problema di prestazioni fino ad ora – Grish

+0

i suoi lavori per me. –

Problemi correlati