मैं एक नक्शा बना रहा हूं जो & लोडिंग बॉक्स और ज़ूम स्तर दोनों के आधार पर मार्कर को नष्ट कर देता है। मुझे मार्करों को ठीक से हटाने के लिए एक वास्तविक समस्या हो रही है, ऐसा लगता है कि कभी-कभी कुछ स्थितियों के लिए काम करना प्रतीत होता है।Google मैप्स एपीआई v3: मार्करों को हटाया नहीं जा रहा है
मेरे पास एक ऑब्जेक्ट है जिसमें मार्कर जानकारी है, जिसमें Google मानचित्र मार्कर ऑब्जेक्ट भी शामिल है। मेरा कोड पता लगाता है कि क्या बाउंडिंग बॉक्स या ज़ूम-स्तर के आधार पर बाजार हटाया जाना चाहिए। मैंने मार्कर ऑब्जेक्ट को "setMap (null) पर सेट किया है;" और फायरबग का उपयोग करके मैं देख सकता हूं कि यह सेट हो रहा है, फिर मैं मूल ऑब्जेक्ट को पूरी तरह हटा देता हूं और ऑब्जेक्ट्स डेटा की लंबाई ठीक से अपडेट होती है।
जब मार्कर माना जाता है तो मैं फायरबग कंसोल पर आउटपुट करता हूं, ऐसा लगता है कि मैं काम कर रहा हूं और मैं देख सकता हूं कि मार्कर को बाउंडिंगबॉक्स परिवर्तन पर मार्करों के लिए अजाक्स कॉल से फिर से क्रेट नहीं किया जा रहा है।
फिर भी यदि मैं मानचित्र के चारों ओर ज़ूम करता हूं तो मैं कभी-कभी देख सकता हूं कि मार्कर हटा दिए जा रहे हैं, अगर मैं ज़ूम करता हूं तो माउस को नीचे दबाकर पैन करें। या कभी-कभी मार्कर हटा दिए जाएंगे यदि मैं पहली बार ज़ूमआउट करता हूं, लेकिन यदि मैं फिर से ज़ूम करता हूं तो वापस निकाल दिया जाता है, उन्हें हटाया नहीं जाता है।
मुझे अपने कोड के तर्क के साथ कुछ गलत करना होगा, मैं स्टंप हूं।
आप http://www.trailforks.com/map/test.php?lat=49.352247&lon=-123.202413 जे एस का स्रोत देख सकते हैं http://www.trailforks.com/map/includes/map.js
एक मार्कर को हटाने के लिए कोड नीचे
function clearMarkerMemory(mapItem, i) {
google.maps.event.removeListener(mapItem.lis); // remove stored listener
mapper.data[i].obj.setMap(null); // remove marker
mapper.data.splice(i, 1);
console.log("removed marker "+mapItem.icon+":"+mapItem.nid+' '+mapItem.name);
};
पर है मैं कंसोल के लिए में कुछ और डिबग कहा, जा रहा है मानचित्र के एक साधारण क्षेत्र में केवल 2 मार्कर http://www.trailforks.com/map/test.php?lat=49.641783767&lon=-123.49878636730955&z=14
मैं मार्कर बनाए गए मार्कर देख सकता हूं, फिर मानचित्र को स्थानांतरित कर सकता हूं यह और देखें कि मार्कर फिर से बनाए गए नहीं थे क्योंकि वे मार्कर ऑब्जेक्ट में पाए गए थे। मैं फिर व्यूपोर्ट को स्थानांतरित करता हूं, इसलिए मार्करों में से एक स्क्रीन से बाहर है और मैं देख सकता हूं कि मार्कर हटा दिया गया है और मार्कर ऑब्जेक्ट की लंबाई अपडेट है। लेकिन अगर मैं मार्कर पर मानचित्र को वापस पैन करता हूं तो मानचित्र पर अभी भी है।
संपादित करें, (टिप्पणियों के बाद):
google.maps.event.addListener(map, 'dragend', function() { refreshMarkers(); }); //refresh markers when user moves map
google.maps.event.addListener(map, 'zoom_changed', function() { refreshMarkers(); }); //refresh markers when user moves map
करने के लिए परिवर्तन यह:
होने वाली ईवेंट हैंडलर के कई उदाहरण को रोकने के लिए
मुझे वास्तव में बग अगर "बग" को पुन: उत्पन्न करने में कठिनाइयों का सामना करना पड़ रहा है। आपके कोड पर एक नज़र डालें और यह अच्छी तरह से लिखा है और AFAICS आप सही काम कर रहे हैं। ऐसा नहीं है कि इससे कोई फर्क नहीं पड़ता है, लेकिन क्या आपने सरणी से अलग करने से पहले पूरे 'डेटा [i] 'ऑब्जेक्ट को' null' पर सेट करने का प्रयास किया है? – dda
+1 एक अच्छी तरह से लिखित, बुद्धिमान प्रश्न, बीटीडब्ल्यू के लिए +1 ... – dda
इस दृष्टिकोण को प्राप्त करने के लिए http://www.trailforks.com/map/test.php?lat=49.344530719060245&lon=-123.1294569147949&z=13 फिर क्लिकडैग माउस तो बाईं ओर सभी पीले मार्कर स्क्रीन से बाहर हैं। फिर माउस को दबाकर उस दिशा में मानचित्र को खींचें, इसलिए मार्करों का AJAX कॉल अभी तक आग नहीं है, आप देखेंगे कि सभी मार्कर हटा दिए गए हैं। लेकिन फिर एक बार और बाहर ज़ूम करें और इसे फिर से प्रयास करें और यह संभवतः टूटा जाएगा, मार्कर अब 100% रहेंगे। भले ही वे mapper.data ऑब्जेक्ट से हटा दिए गए हों। – Canadaka