2013-12-10 22 views
11

Używam MarkerClusterer. Kiedy mam dwa lub więcej znaczników w tym samym miejscu, API wyświetla tylko 1 znacznik - górny. Ale jakoś chcę pokazać wszystkie znaczniki, ponieważ każdy będzie otwierał wyraźne wyskakujące okienko. Szukałem znaleźć kilka rozwiązań, ale żaden nie wydaje się działać Ktoś miał podobny problem i czy pls mają rozwiązanie?Więcej niż jeden znacznik w tym samym miejscu - MarkerClusterer

+2

możliwe duplikat [Integracja Spiderfier JS w markerClusterer V3 eksplodować wielo-markerów z dokładnie tym samym długi/ac] (http://stackoverflow.com/questions/9726920/integrating-spiderfier-js-into-markerclusterer -v3-to-explode-multi-markery-with) – geocodezip

+1

@geocodezip jest sposobem na sprawne działanie bez użycia OverlappingMarkerSpiderfier, ponieważ nie spełnia wymagań. Pokazywanie obu znaczników z małą ilością miejsca, aby wiedzieć, że są dwa lub więcej markerów. Dzięki. – Grish

+0

Oczywiście, że istnieje. Po prostu zakoduj to, aby to zrobić. Lub zmień dane wejściowe, aby nie było duplikatów. – geocodezip

Odpowiedz

23

Wreszcie się udało. Dotyczy to wszystkich tych, którzy jeszcze nie znaleźli rozwiązania. Poniżej kod dodaje przesunięcie do znaczników w tej samej lokalizacji:

W funkcji createMarker dodać ten kod:

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

update'u google.maps.Marker obiekt dla każdego markera z nową wartością pozycji - 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

Wolę twoją metodę od sztuczki spidering, ale zastanawiam się, z jakimi markerami pracujesz i czy zauważyłeś spowolnienie miejsca docelowego? – ow3n

+0

obecnie około stu i nie ma problemów z wydajnością do tej pory – Grish

+0

jego prace dla mnie. –

Powiązane problemy