2013-12-10 8 views
11

Ich benutze MarkerClusterer. Wenn ich zwei oder mehr Markierungen an genau derselben Stelle habe, zeigt die API nur eine Markierung an - die oberste. Aber irgendwie möchte ich alle Markierungen zeigen, da jedes einzelne Popup öffnen wird. Ich habe gesucht, einige Lösungen gefunden, aber keine scheinen zu funktionieren Jeder hatte ähnliches Problem und würde pls teilen eine Lösung?Mehr als ein Marker an der gleichen Stelle - MarkerClusterer

+2

möglich Duplikat [Integration Spiderfier JS in markerClusterer V3 Multi-Marker mit exakt gleicher long/lat explodiert] (http://stackoverflow.com/questions/9726920/integrating-spiderfier-js-into-markerclusterer -v3-to-explode-multi-markers-with) – geocodezip

+1

@geocodezip gibt es eine Möglichkeit, es ohne overlappingMarkerSpiderfier zu arbeiten, da es nicht die Notwendigkeit erfüllt. Zeige die Marker mit wenig Platz, nur um zu wissen, dass es zwei oder mehr Marker gibt. Vielen Dank. – Grish

+0

Natürlich gibt es. Codiere es einfach, um das zu tun. Oder ändern Sie die Eingabedaten, sodass keine Duplikate vorhanden sind. – geocodezip

Antwort

23

Endlich hat es funktioniert. Dies ist für alle diejenigen, die noch keine Lösung gefunden haben. Im Folgenden Code auf die Markierungen auf dem gleiche Lage versetzt ergänzt:

In Ihrer createMarker Funktion diesen Code hinzu:

//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

Jetzt Ihr google.maps.Marker Objekt für jeden Marker mit neuem Positionswert Update - 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

Ich bevorzuge Ihre Methode gegenüber dem Spidering-Trick, aber ich frage mich, mit wie vielen Markern Sie arbeiten und ob Sie eine Verlangsamung der Platzierung bemerkt haben. – ow3n

+0

zZ ungefähr hundert und kein Leistungsproblem bis jetzt – Grish

+0

sein arbeitet für mich. –

Verwandte Themen