2015-04-28 6 views
5

मुझे मार्करों का एक बड़ा (~ 1,300) सेट मिला है जो मैं एक समयरेखा पर एक मानचित्र पर रख रहा हूं। असल में यह एक वीडियो चलाने जैसा है जहां समय अनुक्रम के दौरान, मानचित्र पर google.maps.Animation.DROP का उपयोग करके मार्कर लगाए जाते हैं। हमारे पास मानक वीडियो/ऑडियो प्लेयर-प्रकार नियंत्रण है जो आपको टाइमलाइन पर नेविगेट करने की अनुमति देता है: प्ले/पॉज़, स्टार्ट करने के लिए छोड़ें, अंत तक छोड़ें, और एक स्क्रबर बार टाइमलाइन के भीतर मनमाने ढंग से स्थानांतरित करें।मानचित्र पर पुनर्निर्मित किए बिना एकाधिक Google मानचित्र मार्करों को दोबारा छोड़ना

यदि मैं नक्शा खाली से शुरू करता हूं और शुरुआत में समयरेखा रुक जाती है और फिर अंत तक कूद जाती है तो वहां एक संक्षिप्त देरी होती है क्योंकि उन सभी मार्कर ऑब्जेक्ट्स बनाए जाते हैं और फिर वे सभी नक्शे पर एक साथ गिर जाते हैं। यह ठीक है।

एक बार मार्कर रखा गया है और उपयोगकर्ता टाइमलाइन में पिछड़ा हो जाता है (उस बिंदु पर जहां एक विशेष मार्कर अब दिखाई नहीं दे रहा है) मैं marker.setMap(null) करता हूं और मार्कर छुपा हुआ है। मेरे पास read से मार्कर को हटाने का यह सही तरीका है और यह काम करता है।

यदि आप मार्करों की सभी (या बड़ी संख्या) को बनाते/छोड़ते हैं तो बड़ी समस्या प्रकट होती है, फिर टाइमलाइन में वापस नेविगेट करें (जैसे कि बड़ी संख्या में मार्कर हटा दिए जाते हैं), और फिर फिर से कूदें। यह मानचित्र पर पिन का एक बुरा फ्लैश बनाता है जो तब गायब हो जाता है और अचानक नक्शे के शीर्ष से गिर जाता है।

जैसा कि बताया गया है, सही प्रभाव (पहले से मानचित्र पर दिखाई देने के बिना पिन ड्रॉप) पहले पिन पिन ड्रॉप होने पर होता है, लेकिन बाद में बूंदें इस अजीब व्यवहार का कारण बनती हैं। पिन की छोटी संख्या के लिए यह काफी हद तक अचूक है, लेकिन बहुत सारे पिन के साथ यह बहुत अधिक विचलित है।

ऐसा लगता है कि मार्कर की आंतरिक स्थिति में कुछ होना चाहिए कि marker.setMap(null) वास्तव में रीसेट नहीं कर रहा है, लेकिन मुझे पूरा यकीन नहीं है कि यह क्या हो सकता है।

मैंने मूल रूप से आवश्यकतानुसार नए मार्कर बनाए और फिर गायब होने पर उन्हें नष्ट कर दिया, लेकिन इस ओवरहेड ने चीजों को सुस्त बना दिया। सिद्धांत रूप में मुझे लगता है कि मेरे दृष्टिकोण को पूरे काम करना चाहिए, लेकिन मुझे मूल रूप से सही प्रभाव के साथ एक अच्छा शॉट मिलता है और दोहराना व्यवहार करता है।

क्या कोई ऐसा कुछ देखता है जो मैं गलत कर रहा हूं या इस व्यवहार को कैसे करें इस पर सुझाव हैं?

तर्क यह है कि पिन, दिखाता है, और खाल कहते हैं मोटे तौर पर इस प्रकार है:

Realtime.prototype.placePin = function(ent) { 
    var ctxt = this; 

    ent.latLng = new google.maps.LatLng(ent.lat, ent.lng); 

    ent.marker = new google.maps.Marker({ 
     position: ent.latLng, 
     map: null, 
     animation: google.maps.Animation.DROP, 
     optimized: false 
    }); 
}; 

Realtime.prototype.tick = function(force_tick) { 
    var ctxt = this; 

    if ((!ctxt.playing || ctxt.dragging) && !force_tick) { 
     return; 
    } else { 
     ctxt.time += ctxt.per_tick; 
    } 
    ctxt.nowDate = new Date(ctxt.time * 1000); 

    ctxt.pins_to_drop = [];  
    for (var i = 0, l = ctxt.entries.length; i < l; i++) { 
     var ent = ctxt.entries[i]; 
     var ent_date = new Date(ent.created + ' UTC'); 
     if (ent_date < ctxt.nowDate) { 
      if (!ent.marker || ent.marker.map == null) { 
       if (!ent.marker) { 
        ctxt.placePin(ent); 
       } 
       ctxt.pins_to_drop.push(ent); 
      } 
     } else { 
      if (ent.marker && ent.marker.map != null) { 
       ent.marker.setMap(null); 
      } 
     } 
    } 

    ctxt.updateUI(); 

}; 

Realtime.prototype.updateUI = function() { 
    var ctxt = this; 

    for (var i = 0, l = ctxt.pins_to_drop.length; i < l; i++) { 
     var ent = ctxt.pins_to_drop[i]; 
     ent.marker.setMap(null); 
     ent.marker.setAnimation(google.maps.Animation.DROP); 
     ent.marker.setMap(ctxt.map); 
    } 
}; 
+2

कृपया एक [न्यूनतम, पूर्ण, और सत्यापन योग्य उदाहरण] (http://stackoverflow.com/help/mcve) प्रदान करें जो इस मुद्दे को प्रदर्शित करता है। – geocodezip

+0

इसे आज़माएं: लोड, ड्रॉप पिन, ड्रॉप के लिए प्रतीक्षा करें, पिन छुपाएं, छिपाने की प्रतीक्षा करें, पिन को दोबारा छोड़ दें - http://jsfiddle.net/theraccoonbear/50437ptm/6/ – theraccoonbear

+0

वह उदाहरण वे हमेशा सभी ड्रॉप करते हैं उसी समय। – geocodezip

उत्तर

-1

updated fiddle देखें और मुझे यकीन है कि नहीं कर रहा हूँ अगर यह आपकी समस्या लेकिन छिपाने/प्रकट करें एक करने के लिए एक और तरीका है हल करती है मार्कर marker.setVisible(boolean) के रूप में मार्कर के setVisible() पर कॉल करके है। इस मामले में ड्रॉप एनीमेशन केवल पहली बार काम करेगा क्योंकि setVisible() मार्कर को मानचित्र से फिर से संबद्ध नहीं करता है क्योंकि यह पहले से ही जुड़ा हुआ है।

+0

यह दूसरी और बाद में पिन संबोधित नहीं करता है चला जाता है - और उस दृष्टिकोण नहीं है - यह समस्या ठीक नहीं होती। – theraccoonbear

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