2011-12-15 23 views
20

मैं नीचे के रूप में 2 समारोह है:गूगल मैप्स एपीआई 3 निकालें चयनित मार्कर केवल

function addMarker() { 
    marker = new google.maps.Marker({ 
     position: Gpoint, 
     map: map, 
     draggable: true, 
     animation: google.maps.Animation.DROP 
    }); 
    map.panTo(Gpoint); 

    google.maps.event.addListener(marker, "rightclick", 
    function (point) { 
    showContextMarker(point.latLng); }); 
    $('.contextmenu').remove(); 
}; 

function delMarker() { marker.setMap(null); $('.contextmenu').remove(); }; 

तो, समझ सकते हैं के रूप में मैं एक संदर्भ मेनू होने पर विकल्प "मार्कर हटाएँ" है। मैं इस मेनू को दिखाने के लिए, मार्कर जोड़ने के दौरान "दाएं क्लिक" श्रोता को बाध्य कर रहा हूं।

सब कुछ इस पल तक किसी भी समस्या के बिना काम कर रहा है।

लेकिन जब मैं हटाने के लिए मार्कर पर क्लिक करने का प्रयास करता हूं; यह केवल अंतिम जोड़ा मार्कर को प्रभावित कर रहा है। जब मैं दोबारा प्रयास करता हूं; कुछ नहीं हुआ।

तो मेरा विचार है क्लिक किए गए मार्कर की आईडी (या कुछ जो उपयोगी हो सकता है) प्राप्त करना है और इस के अनुसार इस विलोपन समारोह को चलाने के लिए है।

संक्षेप में; मैं उस मार्कर को हटाना चाहता हूं जिसे मैंने कई मार्कर वाले मानचित्र से क्लिक किया था।

क्या आपके पास इस समस्या को हल करने के लिए कोई दृष्टिकोण है?

अग्रिम धन्यवाद!

सोल्ड!

यहां समाधान है। धन्यवाद Fatih। यह आपके मार्गदर्शन के बिना असंभव था:

var id; 
var markers = {}; 
var addMarker = function() { 
    marker = new google.maps.Marker({ 
     position: Gpoint, 
     map: map, 
     draggable: true, 
     animation: google.maps.Animation.DROP 
    }); 
    map.panTo(Gpoint); 
    id = marker.__gm_id 
    markers[id] = marker; 

    google.maps.event.addListener(marker, "rightclick", function (point) { id = this.__gm_id; delMarker(id) }); 
} 

var delMarker = function (id) { 
    marker = markers[id]; 
    marker.setMap(null); 
} 

कॉलिंग द्वारा समारोह को हटा दें: delMarker(id) पी.एस.:

धन्यवाद "ठीक क्लिक इस मामले पर पर्याप्त है"!

+0

लेकिन आप क्या हासिल करना चाहते हैं ??? सभी मार्करों को हटा दें? – Jorge

+0

केवल उस पर क्लिक करें जिस पर क्लिक किया गया है! – MrGorki

+0

@ श्री गोरकी, आपने __gm_id कैसे उत्पन्न किया? क्या यह वृद्धि हुई है? – jemz

उत्तर

41

Working Sample on jsFiddle


गूगल मैप्स

अपने मार्कर का प्रबंधन नहीं है। तो आपके सभी मार्करों को स्वयं ही प्रबंधित किया जाना चाहिए।

वैश्विक मार्कर ऑब्जेक्ट बनाएं और इस ऑब्जेक्ट पर सभी मार्करों को धक्का दें। और मार्कर उदाहरण प्राप्त करते समय प्रत्येक मार्कर को अद्वितीय आईडी दें। फिर जब आप एक मार्कर को हटाना चाहते हैं तो अपनी आईडी लें और इस मार्कर को वैश्विक मार्कर ऑब्जेक्ट में ढूंढें और आखिरकार इस मार्कर इंस्टेंस की सेटमैप विधि को नल तर्क पास करने के साथ कॉल करें।

इसके अलावा मैंने एक डेमो जोड़ा है जो jsFiddle पर काम करता है। कोड भारी दस्तावेज है।

आपका psuedo कोड इस तरह होना चाहिए। अधिक विस्तृत कोड के लिए कृपया डेमो देखें।

 
var currentId = 0; 
var uniqueId = function() { 
    return ++currentId; 
} 

var markers = {}; 
var createMarker = function() { 
    var id = uniqueId(); // get new id 
    var marker = new google.maps.Marker({ // create a marker and set id 
     id: id, 
     position: Gpoint, 
     map: map, 
     draggable: true, 
     animation: google.maps.Animation.DROP 
    }); 
    markers[id] = marker; // cache created marker to markers object with id as its key 
    return marker; 
} 
var deleteMarker = function(id) { 
    var marker = markers[id]; // find the marker by given id 
    marker.setMap(null); 
} 
+0

के रूप में उपयोग कर सकते हैं, मैंने सोचा लेकिन यह पता नहीं लगा सका। मैं अपने सरणी से तुलना करने के लिए मानचित्र पर क्लिक करके एक उदाहरण की आईडी कैसे प्राप्त कर सकता हूं? – MrGorki

+0

"मार्कर .__ gm_id" आईडी लगता है लेकिन मैं इसका पता कैसे लगा सकता हूं? getElementbyId या कुछ और द्वारा? किसी भी मदद की वास्तव में सराहना की जाएगी! – MrGorki

+0

सबसे पहले, मुझे आपको सरणी का उपयोग करने की पेशकश नहीं करनी चाहिए क्योंकि जब आप सरणी का उपयोग करते हैं, तो आपको मार्कर को सरणी में खोजना होगा। सरणी के बजाय ऑब्जेक्ट का उपयोग करते समय इसकी कोई आवश्यकता नहीं है। दूसरा यह है कि जब आप मार्कर पर राइट क्लिक करते हैं तो आप मार्कर की आईडी प्रॉपर्टी ले सकते हैं, मुझे लगता है कि आप जानते हैं कि आपने किस मार्कर पर क्लिक किया था। यदि आप इसे जानते हैं तो इसे प्राप्त करने के लिए बस .id का उपयोग करें। यदि आप इसे प्राप्त करने के लिए एक तरीका लागू नहीं करते हैं। तो तर्क इस तरह है। – Fatih

2

@Fatih पूरक आप मार्कर का प्रबंधन करना चाहिए जवाब। उदाहरण के लिए आप प्रत्येक मार्कर को सरणी में जोड़ सकते हैं और फिर निकालने के लिए, आप इस मार्कर को सरणी में पा सकते हैं और वैल को मानचित्र में सेट कर सकते हैं।

1
इस

मेरे लिए काम किया:

एक दूसरे currentId, यदि आप एक बेहतर विचार है, मुझे पता है

var actualMarkerId = 0; 
var currentId = 0; 



    if (actualMarkerId>0) { 
     deleteMarker(actualMarkerId); 
     console.log(actualMarkerId); 
    } 
    var id = uniqueId(); // get new id 
    actualMarkerId = id; 
0

न्यूनतम परिवर्तनों

var newid=0; 

for (var index in results){ 

var marker = new google.maps.Marker({ 

map: map, 
icon: image, 

__gm_id: = newid+1, 

}); 
} 

अब मार्कर [ '__ gm_id' के लिए जाने ] अभी भी एक मान है

2

बस अपने मार्कर को दाएं क्लिक फ़ंक्शन में पास करें।

var marker = new google.maps.Marker({ 
    position: event.latLng, 
    map: map, 
    draggable: true, 
    title: 'Hello World!' 
}); 
google.maps.event.addListener(marker, "rightclick", function (point) {delMarker(marker)}); 

और समारोह इस बनाने: उदाहरण के लिए:

var delMarker = function (markerPar) { 
    markerPar.setMap(null); 
} 

आपका मार्करों rightclicks पर हटाने योग्य हो जाएगा।