2013-12-10 8 views
11

मैं मार्करक्लस्टरर का उपयोग कर रहा हूं। जब मेरे पास एक ही स्थान पर दो या दो से अधिक मार्कर होते हैं, तो एपीआई केवल 1 मार्कर प्रदर्शित करता है - शीर्ष वाला। लेकिन किसी भी तरह से मैं सभी मार्कर दिखाना चाहता हूं क्योंकि प्रत्येक व्यक्ति अलग-अलग पॉपअप खोल देगा। मैंने कुछ समाधान खोजे हैं लेकिन कोई भी काम नहीं कर रहा है किसी के पास समान समस्या थी और क्या कोई समाधान साझा करेगा ??एक ही स्थान पर एक से अधिक मार्कर - मार्करक्लस्टर

+2

[markerClusterer वी 3 में Spiderfier जे एस घालमेल के साथ ठीक उसी देशांतर/अक्षांश बहु मार्करों विस्फोट के लिए] के संभावित डुप्लिकेट (http://stackoverflow.com/questions/9726920/integrating-spiderfier-js-into-markerclusterer -v3-to-explode-multi-markers-with) – geocodezip

+1

@geocodezip इसे ओवरलैपिंगमार्कर स्पेडरफ़ीयर का उपयोग किये बिना काम करने का कोई तरीका है क्योंकि यह आवश्यकता को पूरा नहीं करता है। कम जगह वाले मार्कर दोनों को यह जानने के लिए कि दो या दो से अधिक मार्कर करेंगे। धन्यवाद। – Grish

+0

बेशक वहाँ है। बस इसे करने के लिए कोड। या इनपुट डेटा बदलें ताकि कोई डुप्लिकेट न हो। – geocodezip

उत्तर

23

अंत में यह काम कर रहा है। यह उन सभी के लिए है जो अभी भी समाधान नहीं मिला है। नीचे दिए गए कोड को एक ही स्थान पर मार्कर के लिए ऑफसेट जोड़ता है:

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

अब नई स्थिति से प्रत्येक का मान मार्कर के लिए अपने google.maps.Marker वस्तु अद्यतन -:

अपने createMarker समारोह में इस कोड को जोड़ना 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

मैं स्पाइडरिंग चाल पर आपकी विधि को बहुत पसंद करता हूं लेकिन मुझे आश्चर्य है कि आप कितने मार्कर के साथ काम कर रहे हैं और यदि आपने प्लेसमेंट के धीमे-डाउन को देखा है? – ow3n

+0

वर्तमान में लगभग सौ और कोई प्रदर्शन समस्या अब तक – Grish

+0

मेरे लिए यह काम करती है। –

संबंधित मुद्दे