Google मैप्स API v3: सभी मार्कर कैसे निकालें?


429

Google मानचित्र API v2 में, यदि मैं सभी मानचित्र मार्करों को हटाना चाहता हूं, तो मैं बस कर सकता हूं:

map.clearOverlays();

मैं Google मानचित्र API v3 में यह कैसे करूँ ?

संदर्भ API को देखते हुए , यह मेरे लिए अस्पष्ट है।


3
मुझे नीचे दिए गए लिंक पर कुछ कोड मिला, लेकिन पवित्र गाय - यह है कि एपीआई के v2 में कोड की पिछली 1 पंक्ति का अनुकरण करने के लिए बहुत सारे कोड। lootogo.com/googlemapsapi3/markerPlugin.html
mp_

2
याद रखें कि मैप्स 3.0 का मतलब है कि मोबाइल डिवाइसों के लिए जितना संभव हो उतना कम उपयोग करने के लिए बहुत हल्का होना ...
पेट्रोगैड

1
यहां सुझाए गए समाधान 2010/07/29 के अनुसार टूटते दिखाई देते हैं। काश मेरे पास इसके बजाय सुझाव देने के लिए एक कार्यशील संस्करण होता।
जोनाथन हैनसन

9
उच्चतम मूल्यांकित उत्तर गलत है। यह कैसे करें यह देखने के लिए इस उदाहरण पर स्रोत देखें: google-developers.appspot.com/maps/documentation/javascript/…
Seb Ashton

कृपया इस पृष्ठ पर एक नज़र डालें gmaps-utility-library.googlecode.com/svn/trunk/markermanager/…
जुनैद कादिर

जवाबों:


487

बस निम्नलिखित करें:

I. एक वैश्विक चर घोषित करें:

var markersArray = [];

द्वितीय। एक फ़ंक्शन को परिभाषित करें:

function clearOverlays() {
  for (var i = 0; i < markersArray.length; i++ ) {
    markersArray[i].setMap(null);
  }
  markersArray.length = 0;
}

या

google.maps.Map.prototype.clearOverlays = function() {
  for (var i = 0; i < markersArray.length; i++ ) {
    markersArray[i].setMap(null);
  }
  markersArray.length = 0;
}

तृतीय। निम्नलिखित को कॉल करने से पहले 'मार्करअरे' में मार्करों को पुश करें:

markersArray.push(marker);
google.maps.event.addListener(marker,"click",function(){});

चतुर्थ। जहाँ भी आवश्यकता हो, फंक्शन clearOverlays();या कॉल करें map.clearOverlays();

बस!!


32
for..in लूप विथ एरे? यह निश्चित रूप से अच्छा नहीं हो सकता है ..? ..हिस्से: stackoverflow.com/questions/500504/…
zack

4
वैकल्पिक रूप से आप मार्कर को उपयोग कर मार्कर छिपा सकते हैं। अदृश्य (झूठा)
NBK

12
मार्कर अभी भी सरणी में रखे गए हैं, लेकिन यह बड़ा और बड़ा होता जाएगा। लूप के बाद ऐरे को क्लीयर करने का सुझाव देगा
एमी

5
आप हमेशा markersArrayइसकी लंबाई सेट करने के बजाय एक खाली सरणी में सेट कर सकते हैं , जो मुझे अजीब लगता है:markersArray = [];
नरकनाथ

11
मैं whileसरणी को संसाधित करने के लिए एक दृष्टिकोण का उपयोग करूँगा while(markersArray.length) { markersArray.pop().setMap(null); }:। उसके बाद सरणी को खाली करने की कोई आवश्यकता नहीं है।
यिंगयांग

84

एक ही समस्या है। यह कोड अब काम नहीं करता है।

मैंने इसे ठीक कर लिया है, क्लीयर मेकर्स का तरीका इस तरह से बदलें:

set_map (नल) ---> setMap (नल)

google.maps.Map.prototype.clearMarkers = function() {
    for(var i=0; i < this.markers.length; i++){
        this.markers[i].setMap(null);
    }
    this.markers = new Array();
};

विषय पर विवरण शामिल करने के लिए दस्तावेज़ीकरण अपडेट किया गया है: https://developers.google.com/maps/documentation/javascript/markers#remove


1
जिस तरह से मुझे आखिरकार यह काम कर रहा था वह मार्करों संग्रह के माध्यम से पुनरावृति करना था जहां मैंने उन्हें संग्रहीत किया और सेटपॉप (नल) का उपयोग किया
सेबस्टियन

4
लेकिन क्या यह स्मृति से मार्करों को साफ करता है? मुझे लगता है कि जावास्क्रिप्ट में स्वचालित कचरा संग्रह है, लेकिन हम कैसे जानते हैं कि Google का एपीआई मार्कर के संदर्भ को नहीं रखता है जब सेटपार्ट (शून्य) कहा जाता है? मेरे आवेदन में, मैं एक टन मार्कर जोड़ता हूं और "हटाता हूं", और मैं उन सभी "हटाए गए" मार्करों से नफरत करूंगा जो स्मृति को चूस रहे हैं।
निक

@ क्लिक करें: 'यह हटाएं। चिह्नक [i];) जोड़ें सेटअप के बाद (शून्य) बिट।
डेव्स

4
इस प्रश्न का उत्तर अब प्रलेखन में दिया गया है। code.google.com/apis/maps/documentation/javascript/…
lashleigh

1
कौन भी उपयोग करता है new Array();?
रिचर्ड्स

47

ऐसा लगता है कि V3 में अभी तक ऐसा कोई फंक्शन नहीं है।

लोग सुझाव देते हैं कि मानचित्र में आपके सभी मार्करों के संदर्भ एक सरणी में रखें। और फिर जब आप उन्हें सभी को हटाना चाहते हैं, तो बस सरणी को लूप करें और प्रत्येक संदर्भ पर .setMap (नल) पद्धति को कॉल करें।

अधिक जानकारी / कोड के लिए इस प्रश्न को देखें।

मेरा संस्करण:

google.maps.Map.prototype.markers = new Array();

google.maps.Map.prototype.getMarkers = function() {
    return this.markers
};

google.maps.Map.prototype.clearMarkers = function() {
    for(var i=0; i<this.markers.length; i++){
        this.markers[i].setMap(null);
    }
    this.markers = new Array();
};

google.maps.Marker.prototype._setMap = google.maps.Marker.prototype.setMap;

google.maps.Marker.prototype.setMap = function(map) {
    if (map) {
        map.markers[map.markers.length] = this;
    }
    this._setMap(map);
}

कोड इस कोड का संपादित संस्करण है http://www.lootogo.com/googlemapsapi3/markerPlugin.html मैंने मैन्युअल रूप से addMarker को कॉल करने की आवश्यकता को हटा दिया।

पेशेवरों

  • इस तरह से आप कोड को कॉम्पैक्ट और एक स्थान पर रखते हैं (नाम स्थान को प्रदूषित नहीं करता है)।
  • आपको मार्करों का ट्रैक रखने की आवश्यकता नहीं है, अब आप हमेशा मानचित्र पर सभी मार्करों को map.getMersers () कॉल करके पा सकते हैं

विपक्ष

  • प्रोटोटाइप और रैपर जैसे मैंने अब अपना कोड Google कोड पर निर्भर करता है, अगर वे अपने स्रोत में मेयर परिवर्तन करते हैं तो यह टूट जाएगा।
  • यदि आप इसे नहीं समझते हैं तो आप इसे ठीक नहीं कर पाएंगे अगर यह टूट जाता है। संभावना कम है कि वे कुछ भी बदलने जा रहे हैं जो इसे तोड़ देगा, लेकिन फिर भी ..
  • यदि आप मैन्युअल रूप से एक मार्कर निकालते हैं, तो यह संदर्भ अभी भी मार्करों सरणी में होगा। (आप इसे ठीक करने के लिए मेरे सेटपॉप विधि को संपादित कर सकते हैं, लेकिन गर्त मार्करों को लूप करने और संदर्भ को हटाने की कीमत पर)

1
+1 मुझसे। लेकिन आपका जवाब बेहतर होगा यदि आप रैपर को ऐडअमर को स्वचालित रूप से कॉल करने के लिए शामिल करते हैं!
एंड्रयू

मुझे लगता है कि आप एंड्रयूज का जवाब वास्तव में दे रहे हैं। क्या आप कोड के साथ दिखाएंगे कि आप क्या और क्यों अलग करेंगे। धन्यवाद
mp_

देरी के लिए क्षमा करें, मैं पोस्ट कोड से वापस पकड़ रहा था क्योंकि मेरे पास इसे जल्दी से परीक्षण करने का कोई रास्ता नहीं था।
मीकू मोरी

धन्यवाद मीकू। हालाँकि, मुझे समझ नहीं आ रहा है - मैं आपके उदाहरण में एक नया मार्कर कैसे जोड़ूँ। फिर, बहुत बहुत धन्यवाद!
mp_

1
मैंने सेटपाइप (नल) का उपयोग करने की कोशिश की, लेकिन मेरे पास एक ऑटो-अपडेटिंग स्क्रिप्ट थी, और हर बार जब मैंने अपने सभी 50 या इतने मार्करों को एक अशक्त मानचित्र पर सेट किया था, तब भी मेरे पास डोम में घूमने वाले मैपलेस मार्करों का एक गुच्छा था। यह पृष्ठ को क्रैश करने का कारण बना रहा क्योंकि प्रत्येक 30 सेकंड में इसने DOM में 50 नए मार्कर जोड़े, और यह अंतहीन रूप से प्रचारित हुआ क्योंकि पेज एक वीडियो वॉल पर 24/7 खुला रहता था। मुझे शीर्ष उत्तर का उपयोग करना था और नए बनाने से पहले पूरी तरह से DOM से सभी मानचित्र ओवरले को साफ़ करना था। आशा है कि यह किसी की मदद करता है; मुझे यह पता लगाने में बहुत समय लगा कि मेरा पृष्ठ क्यों दुर्घटनाग्रस्त हो रहा था! :(
इंटरफ़ेसग्यू

23

यह मूल रूप से उपयोगकर्ताओं के मूल प्रश्न के मूल प्रतिक्रिया के तहत यिंगयांग मार 11 '14 द्वारा मूल रूप से 15: 049 में पोस्ट किए गए सभी समाधानों में से सबसे सरल था।

मैं 2.5 साल बाद गूगल मैप्स v3.18 के साथ उनके उसी समाधान का उपयोग कर रहा हूं और यह एक आकर्षण की तरह काम करता है

markersArray.push(newMarker) ;
while(markersArray.length) { markersArray.pop().setMap(null); }

// No need to clear the array after that.

21
google.maps.Map.prototype.markers = new Array();

google.maps.Map.prototype.addMarker = function(marker) {
    this.markers[this.markers.length] = marker;
};

google.maps.Map.prototype.getMarkers = function() {
    return this.markers
};

google.maps.Map.prototype.clearMarkers = function() {
    for(var i=0; i<this.markers.length; i++){
        this.markers[i].setMap(null);
    }
    this.markers = new Array();
};

मुझे नहीं लगता कि V3 में कोई एक है इसलिए मैंने उपरोक्त कस्टम कार्यान्वयन का उपयोग किया है।

डिस्क्लेमर: मैंने यह कोड नहीं लिखा था, लेकिन जब मैंने इसे अपने कोडबेस में मर्ज किया तो मैं एक संदर्भ बनाए रखना भूल गया, इसलिए मुझे नहीं पता कि यह कहां से आया है।


+1 मुझसे। मैं google.maps.Marker कंस्ट्रक्टर (या सेटपॉप विधि के चारों ओर एक आवरण जोड़ूंगा क्योंकि मुझे लगता है कि कंस्ट्रक्टर इसे आंतरिक रूप से कहता है) जो स्वचालित रूप से addMarker को कॉल करता है, लेकिन अभी भी अच्छा जवाब है :)।
मायकु मोरी

@ माईकू मारी, क्या आप कोड के साथ दिखाएंगे कि आप क्या और क्यों अलग करेंगे। धन्यवाद
mp_

यह कैसे समाधान नहीं है? आप मार्कर को सेट_मैप (नल) का उपयोग करके हटाते हैं, जिस विशेष मार्कर को आप साफ़ करना चाहते हैं, यदि आप इस फ़ंक्शन का उपयोग करके सभी को साफ़ करना चाहते हैं। यदि आप यहाँ कुछ और अनुरोध करना चाहते हैं: code.google.com/p/gmaps-api-issues/issues/…
पेट्रोगैड

मेरा मानना ​​है कि यह यहाँ से आया lootogo.com/googlemapsapi3/markerPlugin.html
Maiku Mori

6
-1 बुरी शैली। केवल एक मार्कर सरणी बनाई गई है, लेकिन क्लीयरमार्कर्स (प्रोटोटाइप के साथ अंतर / सेट अंतर के कारण) के बाद प्रति मैप एक। कई नक्शा वस्तुओं के साथ गंदा कीड़े।
टॉमस

18

नए संस्करण v3 पर, उन्होंने सरणियों में रखने की सिफारिश की। निम्नलिखित के रूप में।

ओवरले-ओवरव्यू पर नमूना देखें

var map;
var markersArray = [];

function initialize() {
  var haightAshbury = new google.maps.LatLng(37.7699298, -122.4469157);
  var mapOptions = {
    zoom: 12,
    center: haightAshbury,
    mapTypeId: google.maps.MapTypeId.TERRAIN
  };
  map =  new google.maps.Map(document.getElementById("map_canvas"), mapOptions);

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

function addMarker(location) {
  marker = new google.maps.Marker({
    position: location,
    map: map
  });
  markersArray.push(marker);
}

// 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);
    }
  }
}

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

6

Google की डेमो गैलरी में एक डेमो है कि वे इसे कैसे करते हैं:

http://code.google.com/apis/maps/documentation/javascript/examples/overlay-remove.html

आप स्रोत कोड देख सकते हैं कि वे मार्कर कैसे जोड़ते हैं।

लंबी कहानी छोटी, वे मार्करों को एक वैश्विक सरणी में रखते हैं। उन्हें हटाते / हटाते समय, वे सरणी के माध्यम से लूप करते हैं और दिए गए मार्कर ऑब्जेक्ट पर ".setMap (नल)" कहते हैं।

हालाँकि, यह उदाहरण एक 'चाल' दिखाता है। इस उदाहरण के लिए "स्पष्ट" का अर्थ है उन्हें मानचित्र से निकालना लेकिन उन्हें सरणी में रखना, जो एप्लिकेशन को मानचित्र में जल्दी से पुनः जोड़ने की अनुमति देता है। एक अर्थ में, यह उन्हें "छुपाने" जैसा काम करता है।

"हटाएं" सरणी को भी साफ करता है।



6

समाधान काफी आसान है। आप विधि का उपयोग हो सकता है: marker.setMap(map);। यहां, आप परिभाषित करते हैं कि पिन किस मानचित्र पर दिखाई देगा।

इसलिए, यदि आप nullइस विधि ( marker.setMap(null);) में सेट करते हैं, तो पिन गायब हो जाएगा।


अब, आप अपने मानचित्र में सभी मार्करों को गायब करते हुए एक फ़ंक्शन डायन लिख सकते हैं।

आप बस अपने पिन को एक एरे में डालते हैं और markers.push (your_new pin)उदाहरण के लिए उन्हें या इस कोड के साथ घोषित करते हैं :

// Adds a marker to the map and push to the array.
function addMarker(location) {
  var marker = new google.maps.Marker({
    position: location,
    map: map
  });
  markers.push(marker);
}

यह एक फ़ंक्शन विच है जो आपके सरणी के सभी मार्करों को मानचित्र में सेट या गायब कर सकता है:

// Sets the map on all markers in the array.
  function setMapOnAll(map) {
    for (var i = 0; i < markers.length; i++) {
      markers[i].setMap(map);
    }
  }

अपने सभी मार्करों को गायब करने के लिए, आपको इस फ़ंक्शन को कॉल करना चाहिए null:

// Removes the markers from the map, but keeps them in the array.
  function clearMarkers() {
    setMapOnAll(null);
  }

और, आपके सभी मार्करों को हटाने और गायब करने के लिए, आपको अपने मार्कर को इस तरह रीसेट करना चाहिए:

// Deletes all markers in the array by removing references to them.
  function deleteMarkers() {
    clearMarkers();
    markers = [];
  }

यह मेरा पूरा कोड है। यह सबसे आसान है जिसे मैं कम कर सकता हूं। ध्यान रखें कि आप YOUR_API_KEYअपनी कुंजी गूगल एपीआई द्वारा कोड में बदल सकते हैं :

<!DOCTYPE html>
<html>
  <head>
  <title>Remove Markers</title>
  <style>
     /* Always set the map height explicitly to define the size of the div
     * element that contains the map. */
     #map {
       height: 100%;
       }
  </style>
</head>
<body>

<div id="map"></div>
<p>Click on the map to add markers.</p>
<script>

  // In the following example, markers appear when the user clicks on the map.
  // The markers are stored in an array.
  // The user can then click an option to hide, show or delete the markers.
  var map;
  var markers = [];

  function initMap() {
    var haightAshbury = {lat: 37.769, lng: -122.446};

    map = new google.maps.Map(document.getElementById('map'), {
      zoom: 12,
      center: haightAshbury,
      mapTypeId: 'terrain'
    });

    // This event listener will call addMarker() when the map is clicked.
    map.addListener('click', function(event) {
      addMarker(event.latLng);
    });

    // Adds a marker at the center of the map.
    addMarker(haightAshbury);
  }

   // Adds a marker to the map and push to the array.
  function addMarker(location) {
    var marker = new google.maps.Marker({
      position: location,
      map: map
    });
    markers.push(marker);
  }

  // Sets the map on all markers in the array.
  function setMapOnAll(map) {
    for (var i = 0; i < markers.length; i++) {
      markers[i].setMap(map);
    }
  }

  // Removes the markers from the map, but keeps them in the array.
  function clearMarkers() {
    setMapOnAll(null);
  }

  // Shows any markers currently in the array.
  function showMarkers() {
    setMapOnAll(map);
  }

  // Deletes all markers in the array by removing references to them.
  function deleteMarkers() {
    clearMarkers();
    markers = [];
  }

</script>
   <script async defer
    src="https://maps.googleapis.com/maps/api/js key=YOUR_API_KEY&callback=initMap">
   </script>
</body>
</html>

आप Google डेवलपर या संपूर्ण दस्तावेज़, Google डेवलपर वेब साइट पर भी देख सकते हैं


5

रॉलिंग के उत्तर का एक साफ और आसान अनुप्रयोग।

function placeMarkerAndPanTo(latLng, map) {
      while(markersArray.length) { markersArray.pop().setMap(null); }
      var marker = new google.maps.Marker({
        position: latLng,
        map: map
      });
      map.panTo(latLng);

      markersArray.push(marker) ;
    }

4

set_mapदोनों उत्तरों में पोस्ट किया गया " " फ़ंक्शन Google मैप्स v3 API में काम नहीं करता है।

पता नहीं क्या हुआ होगा

अपडेट करें:

ऐसा प्रतीत होता है कि Google ने अपना API बदल दिया जैसे कि " set_map" नहीं " setMap" है।

http://code.google.com/apis/maps/documentation/v3/reference.html


4

यहाँ आप मार्करों को हटाने के तरीके का एक उदाहरण पा सकते हैं:

https://developers.google.com/maps/documentation/javascript/examples/marker-remove?hl=es

// Add a marker to the map and push to the array.
function addMarker(location) {
  var marker = new google.maps.Marker({
    position: location,
    map: map
  });
  markers.push(marker);
}

// Sets the map on all markers in the array.
function setAllMap(map) {
  for (var i = 0; i < markers.length; i++) {
    markers[i].setMap(map);
   }
}

// Removes the markers from the map, but keeps them in the array.
function clearMarkers() {
  setAllMap(null);
}

// Deletes all markers in the array by removing references to them.
function deleteMarkers() {
  clearMarkers();
  markers = [];
}

3

एनोन से निम्नलिखित पूरी तरह से काम करता है, हालांकि झिलमिलाहट के साथ जब ओवरले को बार-बार साफ़ करते हैं।

बस निम्नलिखित करें:

I. एक वैश्विक चर घोषित करें:

var markersArray = [];

द्वितीय। एक फ़ंक्शन को परिभाषित करें:

function clearOverlays() {
  if (markersArray) {
    for (i in markersArray) {
      markersArray[i].setMap(null);
    }
  }
}

तृतीय। निम्नलिखित को कॉल करने से पहले 'मार्करअरे' में मार्करों को पुश करें:

markersArray.push(marker);
google.maps.event.addListener(marker,"click",function(){});

चतुर्थ। clearOverlays()जहाँ भी आवश्यक हो फ़ंक्शन को कॉल करें ।

बस!!

आशा है कि आपकी मदद करेगा।


1
for(in in markersArray){}शायद वह नहीं करता है जो आप इसे करने की अपेक्षा करते हैं। यदि Arrayयह कोड में कहीं और बढ़ाया गया है तो यह उन गुणों पर भी लागू करेगा, और केवल अनुक्रमित नहीं। उस का जावास्क्रिप्ट संस्करण markersArray.forEach()जो हर जगह समर्थित नहीं है। आपके साथ बेहतर होगाfor(var i=0; i<markersArray.length; ++i){ markersArray.setMap(null); }
किट सूंड

3

मैंने गूगल-मैप्स-यूटिलिटी-लाइब्रेरी-वी 3 प्रोजेक्ट में मार्केमर लाइब्रेरी का उपयोग सबसे आसान तरीका के रूप में पाया।

1. मार्करमैनर सेट करें

mgr = new MarkerManager(map);
google.maps.event.addListener(mgr, 'loaded', function () {
    loadMarkers();
});

2. मार्कर को मार्कर से जोड़ें

function loadMarkers() {
  var marker = new google.maps.Marker({
            title: title,
            position: latlng,
            icon: icon
   });
   mgr.addMarker(marker);
   mgr.refresh();
 }

3. मार्करों को साफ़ करने के लिए आपको बस मार्करमंगर के clearMarkers()फ़ंक्शन को कॉल करना होगा

mgr.clearMarkers();

ऐसा लगता है कि मार्करों को साफ करने के लिए उस पुस्तकालय को खींचने के लिए बहुत अधिक ओवरकिल है। सभी clearMarkersकॉलिंग मार्करों पर पुनरावृत्त होते हैं marker.setMap(null)(मैंने स्रोत की जांच की)। यह कम काम होगा जो उन्हें एक सरणी में डाल देगा और इसे स्वयं करेगा।
किट सुंडे

3

आप इसे इस तरह भी कर सकते हैं:

function clearMarkers(category){ 
  var i;       

  for (i = 0; i < markers.length; i++) {                          
    markers[i].setVisible(false);        
  }    
}

2

मैंने सिर्फ kmlLayer.setMap (नल) के साथ यह कोशिश की है और यह काम किया है। यकीन नहीं है कि अगर यह नियमित मार्कर के साथ काम करेगा, लेकिन सही ढंग से काम करने के लिए प्रकट होता है।


2

पोल, मार्कर, आदि सहित सभी ओवरले को साफ करने के लिए ...

बस उपयोग करें:

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

यहाँ एक फ़ंक्शन है जो मैंने ऐसा करने के लिए लिखा था, जो मुझे एक मानचित्र एप्लिकेशन पर बनाता है:

  function clear_Map() {
    directionsDisplay = new google.maps.DirectionsRenderer();
    //var chicago = new google.maps.LatLng(41.850033, -87.6500523);
    var myOptions = {
        zoom: 8,
        mapTypeId: google.maps.MapTypeId.ROADMAP,
        center: HamptonRoads
    }

    map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
    directionsDisplay.setMap(map);
    directionsDisplay.setPanel(document.getElementById("directionsPanel"));
}

यह भी नक्शे को रीसेट नहीं करेगा? मान लें कि क्या उपयोगकर्ता ने मानचित्र को एक नए क्षेत्र में खींच लिया था?
किचु

2

मानचित्र से सभी मार्करों को हटाने के लिए कुछ इस तरह से कार्य बनाएं:

1.addMarker (स्थान): यह फ़ंक्शन मैप पर मार्कर जोड़ने के लिए उपयोग किया जाता है

2.clearMarkers (): यह फ़ंक्शन मैप से सभी मार्करों को हटाता है, सरणी से नहीं

3.setMapOnAll (नक्शा): यह फ़ंक्शन सरणी में मार्कर जानकारी जोड़ने के लिए उपयोग किया जाता है

4.deleteMarkers (): यह फ़ंक्शन उनके संदर्भों को हटाकर सरणी के सभी मार्करों को हटा देता है।

// Adds a marker to the map and push to the array.
      function addMarker(location) {
        var marker = new google.maps.Marker({
          position: location,
          map: map
        });
        markers.push(marker);
      }


// Sets the map on all markers in the array.
      function setMapOnAll(map) {
        for (var i = 0; i < markers.length; i++) {
          markers[i].setMap(map);
        }
      }



// Removes the markers from the map, but keeps them in the array.
  function clearMarkers() {
    setMapOnAll(null);
  }

// Deletes all markers in the array by removing references to them.
      function deleteMarkers() {
        clearMarkers();
        markers = [];
      }

2

ऐसा करने का सबसे साफ तरीका नक्शे की सभी विशेषताओं पर पुनरावृति करना है। मार्कर (पॉलीगन्स, पॉलीलाइन, ect के साथ) नक्शे की डेटा परत में संग्रहीत होते हैं ।

function removeAllMarkers() {
  map.data.forEach((feature) => {
    feature.getGeometry().getType() === 'Point' ? map.data.remove(feature) : null
  });
}

इस मामले में कि मार्कर को ड्राइंग मैनेजर के माध्यम से जोड़ा जा रहा है, मार्करों का एक वैश्विक सरणी बनाना या मार्करों को डेटा परत में इस तरह से बनाना सबसे अच्छा है:

google.maps.event.addListener(drawingManager, 'overlaycomplete', (e) => {
    var newShape = e.overlay;
    newShape.type = e.type;

    if (newShape.type === 'marker') {
      var pos = newShape.getPosition()
      map.data.add({ geometry: new google.maps.Data.Point(pos) });

      // remove from drawing layer
      newShape.setMap(null);
    }
  });

मैं दूसरे दृष्टिकोण की सलाह देता हूं क्योंकि यह आपको बाद में अन्य google.maps.data वर्ग विधियों का उपयोग करने की अनुमति देता है।



0

मुझे नहीं पता कि क्यों, लेकिन, setMap(null)जब मैं उपयोग कर रहा हूं तो मेरे मार्करों के लिए सेटिंग मेरे लिए काम नहीं करती DirectionsRenderer

मेरे मामले में मुझे setMap(null)मेरे DirectionsRendererसाथ भी कॉल करना था ।

ऐसा कुछ:

var directionsService = new google.maps.DirectionsService();
var directionsDisplay = new google.maps.DirectionsRenderer();

if (map.directionsDisplay) {
    map.directionsDisplay.setMap(null);
}

map.directionsDisplay = directionsDisplay;

var request = {
    origin: start,
    destination: end,
    travelMode: google.maps.TravelMode.DRIVING
};

directionsDisplay.setMap(map);
directionsService.route(request, function (result, status) {
    if (status == google.maps.DirectionsStatus.OK) {
        directionsDisplay.setDirections(result);
    }
});

0

बस मार्करों पर चलते हैं और उन्हें नक्शे से हटाते हैं, उसके बाद खाली मानचित्र मार्कर सरणी देते हैं:

var markers = map.markers;
for(var i = 0; i < markers.length; i++) {
    markers[i].setMap(null);
}
map.markers = [];


0

मैंने सभी प्रस्तावित समाधानों की कोशिश की है, लेकिन मेरे लिए कुछ भी काम नहीं किया जबकि मेरे सभी मार्कर एक क्लस्टर के तहत थे। आखिरकार मैंने इसे रखा:

var markerCluster = new MarkerClusterer(map, markers,
    { imagePath: 'https://developers.google.com/maps/documentation/javascript/examples/markerclusterer/m' });
agentsGpsData[agentGpsData.ID].CLUSTER = markerCluster;

//this did the trick
agentsGpsData[agentId].CLUSTER.clearMarkers();

दूसरे शब्दों में, यदि आप एक क्लस्टर में मार्कर लपेटते हैं और सभी मार्कर को हटाना चाहते हैं, तो आप कॉल करते हैं:

clearMarkers();

-1

आप उन्हें हटाने या उन्हें हटाने के रूप में हटाने का मतलब है?

यदि छिपा हो:

function clearMarkers() {
            setAllMap(null);
        }

यदि आप उन्हें हटाना चाहते हैं:

 function deleteMarkers() {
            clearMarkers();
            markers = [];
        }

ध्यान दें कि मैं उन पर नज़र रखने और मैन्युअल रूप से रीसेट करने के लिए एक सरणी मार्कर का उपयोग करता हूं।


-1

आपको उस मार्कर पर मैप नल सेट करने की आवश्यकता है।

var markersList = [];    

function removeMarkers(markersList) {
   for(var i = 0; i < markersList.length; i++) {
      markersList[i].setMap(null);
   }
}

function addMarkers() {
   var marker = new google.maps.Marker({
        position : {
            lat : 12.374,
            lng : -11.55
        },
        map : map
       });
      markersList.push(marker);
   }

-1

मुझे सरल समाधान मिला (मुझे लगता है):

var marker = new google.maps.Marker();

function Clear(){
     marker.setMap(null);
}

-1

मैं एक शॉर्टहैंड का उपयोग करता हूं जो काम को अच्छी तरह से करता है। बस करो

    map.clear();


-3

मुझे पता है कि यह शायद एक शिष्ट समाधान है, लेकिन यह वही है जो मैं करता हूं

$("#map_canvas").html("");
markers = [];

हर बार मेरे लिए काम करता है।


2
$ ( "# map_canvas") एचटीएमएल ( "")। वास्तव में पूरे मानचित्र को साफ साफ कर देगा और jQuery पर भी निर्भर करेगा, इसलिए आपकी प्रतिक्रिया मूर्खतापूर्ण और अस्वस्थ दोनों है।
सैम

हां यह सही है। मानचित्र और मार्करों को प्रारंभ करें
क्रोंस

लेकिन वह उस मानचित्र को फिर से संगठित नहीं करना चाहता जो वह मौजूदा मार्करों को हटाना चाहता है ....
सैम

मैं केवल उसी तरह की पेशकश कर रहा हूं जो मैंने मौजूदा मार्करों को हटाने के लिए पाया है। कम से कम इसे एक शॉट दें और मुझे बताएं कि यह काम किया या नहीं। यह मेरे लिए काम करता है
kronus

2
मानचित्र मार्करों को हटाने की इच्छा के पूरे बिंदु को नक्शे को फिर से व्यवस्थित करने से बचने के लिए है, मेरी जैसी स्थितियों का मतलब था क्योंकि मैं मानचित्र पर ड्राइंग के लिए googles ड्राइंग लाइब्रेरी का उपयोग कर रहा था अगर मैं इसे बंद कर देता हूं और पूरे मानचित्र को फिर से संगठित करता हूं तो सभी ओवरले आकर्षित हो जाते हैं सभी ओवरले को स्टोर करने और उन्हें फिर से जोड़ने का एकमात्र तरीका बंद कर दें जो कि बहुत सारे अनावश्यक काम हैं। मानचित्र को पुन: व्यवस्थित करें मार्करों को हटा नहीं रहा है, फिर से इसे फिर से खरोंचने से पुन: अंकन नहीं कर रहा है।
सैम
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.