2010-11-24 3 views
5

मैंने मार्करों की एक सरणी बनाई है। मैं 'क्लिक' सुनने के लिए मार्करों की इन सरणी का उपयोग करता हूं और मार्कर को Google मानचित्र पर रखता हूं, साथ ही 'सभी मार्करों को साफ़ करने' के लिए फ़ंक्शंस बनाना, 'सभी मार्करों को फिर से प्रदर्शित करना' और 'सभी मार्कर हटाएं'।Google मानचित्र पर एक समय में एक मार्कर को कैसे हटाएं

समस्या यह है कि, मैं इसे इस तरह से कैसे कर सकता हूं जहां मैं एक-मार्कर-ए-टाइम को साफ़ या हटाने में सक्षम हूं? कारण यह है कि अगर मैं गलती से ऐसे स्थान पर साजिश करता हूं जहां मैं नहीं चाहता, और मैं इसे साफ़/हटाना चाहता हूं, तो मैं इसे नहीं कर सका। अगर मैं स्पष्ट करने के लिए थे/है कि विशेष मार्कर, मार्कर है कि मैं पहले से साजिश रची साफ़ कर दिया जाएगा के बाकी/रूप में अच्छी तरह से नष्ट कर दिया ... हटाना

मेरे कोड:

//Initialize the map 
function initialize() { 
    var myLatlng = new google.maps.LatLng(2,110); 
    var myOptions = { 
     zoom: 3, 
     center: myLatlng, 
     mapTypeId: google.maps.MapTypeId.HYBRID 
    }; 

    map = new google.maps.Map(document.getElementById("map_canvas"), myOptions); 

    infowindow = new google.maps.InfoWindow({ 
     content: "loading..." 
    }); 
} 

function changeForm(the_form) { 
    window.location = the_form; 
} 


//Listen for click 
function marker() { 
    google.maps.event.addListener(map, 'click', function(event) { 
     addMarker(event.latLng); 
    }); 
} 

// Place markers in by click 
function addMarker(location) { 
    marker = new google.maps.Marker({ 
     position: location, 
     map: map, 
     title:"Specified Location", 
     icon: 'images/greenPoint.png' 
    }); 
    markersArray.push(marker); 
} 

// Deletes all markers in the array by removing references to them 
function deleteOverlays() { 
    if (markersArray) { 
     for (i in markersArray) { 
      markersArray[i].setMap(null); 
     } 
     markersArray.length = 0; 
    } 
} 

// Removes the overlays from the map, but keeps them in the array 
function clearOverlays() { 
    if (markersArray) { 
     for (i in markersArray) { 
      markersArray[i].setMap(null); 
     } 
    } 
} 

// Shows any overlays currently in the array 
function showOverlays() { 
    if (markersArray) { 
     for (i in markersArray) { 
      markersArray[i].setMap(map); 
     } 
    } 
} 

उत्तर

4

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

मुझे यकीन है कि अगर आप एक google.maps.Marker वस्तु के साथ मनमाने ढंग से जानकारी स्टोर कर सकते हैं नहीं कर रहा हूँ, लेकिन आप हमेशा अपनी खुद की वस्तु एक आईडी और उसके सदस्यों के रूप में एक google.maps.Marker वस्तु है कि बना सकते हैं:

function myMarker(id, location) { 
    this.id = id; 
    this.marker = new google.maps.Marker({...}); 
} 

फिर markersArray[id] = new myMarker(myId, myLocation) आपको अपने सभी मार्करों को उनके मनमानी आईडी के आधार पर स्टोर करने की अनुमति देगा। फिर आप markersArray और मानचित्र से स्वयं को हटाने के लिए this.marker पर वर्णित हैंडलर असाइन कर सकते हैं।

तो अपने markersArray की तर्ज पर मार्कर की बचत होगी यह उनकी अक्षांश/Lngs के आधार पर अपने मार्कर स्टोर करने के लिए किया जाएगा करने के लिए, एक और तरीका है:

markersArray[location.lat][location.lng] = new google.maps.Marker({...}); 

और तुम तो करने के लिए अपने ईवेंट हैंडलर का उपयोग कर सकते क्लिक करते समय मार्कर के लैट/एलएनजी को पकड़ें, और सरणी से खुद को हटा दें और उस तरह से मानचित्र करें।

मुझे बताएं कि आपको अधिक जानकारी चाहिए या नहीं।

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