Google Maps API v3: Tüm işaretçiler nasıl kaldırılır?


429

Google Maps API v2'de, tüm harita işaretleyicilerini kaldırmak istersem şunları yapabilirim:

map.clearOverlays();

Bunu Google Maps API v3'te nasıl yapabilirim ?

Referans API'sine baktığımda , bu benim için belirsiz.


3
Aşağıdaki bağlantıda bazı kod buldum, ama kutsal inek - API v2 önceki 1 kod satırı simüle etmek için kod çok. lootogo.com/googlemapsapi3/markerPlugin.html
mp_

2
Haritalar 3.0'ın mobil cihazların mümkün olduğunca az gecikmeyle kullanabilmesi için ÇOK hafif olması gerektiğini unutmayın ...
Petrogad

1
Burada önerilen çözümler 2010/07/29 itibariyle kırılmış görünmektedir. Keşke bunun yerine önerecek bir çalışma sürümüm olsaydı.
Jonathan Hanson

9
En yüksek oy alan cevap yanlış. Nasıl yapılacağını görmek için bu örnekteki kaynağı görüntüleyin: google-developers.appspot.com/maps/documentation/javascript/…
Seb Ashton

Yanıtlar:


487

Sadece aşağıdakileri yapın:

I. Global bir değişken belirtiniz:

var markersArray = [];

II. Bir fonksiyon tanımlayın:

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

VEYA

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

III. Aşağıdakileri çağırmadan önce 'markerArray' içindeki işaretçileri itin:

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

IV. İstediğiniz yerde clearOverlays();veya map.clearOverlays();işlevini çağırın .

Bu kadar!!


32
bir Array ile döngü içinde? bu kesinlikle iyi olamaz ..? ..see: stackoverflow.com/questions/500504/…
zack

4
Alternatif olarak marker'ı marker.setVisible (false) kullanarak gizleyebilirsiniz
NBK

12
İşaretçiler yine de dizide tutulur, böylece daha da büyür. Döngüden sonra diziyi de temizlemenizi öneririm
Ami

5
her zaman markersArraytuhaf bir tür bulmak onun uzunluğunu ayarlamak için boş bir dizi ayarlayabilirsiniz:markersArray = [];
hellatan

11
Ben kullanmak istiyorum whilediziyi işlenmesi için bir yaklaşım: while(markersArray.length) { markersArray.pop().setMap(null); }. Bundan sonra diziyi temizlemeye gerek yok.
YingYang

84

Aynı sorun. Bu kod artık çalışmıyor.

Düzelttim, clearMarkers yöntemini şu şekilde değiştirin:

set_map (null) ---> setMap (null)

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

Dokümanlar, konuyla ilgili ayrıntıları içerecek şekilde güncellendi: https://developers.google.com/maps/documentation/javascript/markers#remove


1
Nihayet çalıştığım yol, onları sakladığım işaretler koleksiyonu aracılığıyla tekrarlamak ve setMap (null)
Sebastian'ı

4
Fakat bu işaretçileri bellekten temizliyor mu? JavaScript'in otomatik çöp toplama özelliğine sahip olduğunu biliyorum, ancak setMap (null) çağrıldığında Google'ın API'sının işaretçiye bir referans içermediğini nasıl biliyoruz? Uygulamamda, bir ton işaretleyici ekleyip "siliyorum" ve tüm bu "silinen" işaretleyicilerin belleği emmesi için nefret ediyorum.
Nick

@Nick: 'this.markers [i];' öğesini ekleyin setMap (null) bitinden sonra.
DaveS

4
Bu soru şimdi belgelerde cevaplanmıştır. code.google.com/apis/maps/documentation/javascript/…
lashleigh

1
Kim kullanıyor new Array();?
Rihards

47

Görünüşe göre V3'te böyle bir fonksiyon yok.

Kullanıcılar, bir dizideki haritada sahip olduğunuz tüm işaretçilerin referanslarını tutmayı önerir. Ve sonra hepsini silmek istediğinizde, dizi boyunca döngü yapın ve referansların her birinde .setMap (null) yöntemini çağırın.

Daha fazla bilgi / kod için bu soruya bakın.

Benim versiyonum:

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

Kod, bu kodun düzenlenmiş hali http://www.lootogo.com/googlemapsapi3/markerPlugin.html AddMarker'ı manuel olarak arama ihtiyacını kaldırdım.

Artıları

  • Bu şekilde kodu kompakt ve tek bir yerde tutarsınız (ad alanını kirletmez).
  • Artık işaretçileri takip etmek zorunda değilsiniz map.getMarkers () öğesini çağırarak haritadaki tüm işaretçileri her zaman bulabilirsiniz.

Eksileri

  • Benim yaptığım gibi prototipler ve sarıcılar kullanmak, kodumu Google koduna bağımlı hale getiriyor, eğer kaynaklarında bir belediye başkanı değişikliği yaparlarsa bu kırılacak.
  • Eğer anlamadıysanız, kırılırsa düzeltemezsiniz. Bunu kıracak her şeyi değiştirecekleri düşük, ama yine de ..
  • Bir işaretçiyi manuel olarak kaldırırsanız, referans hala işaretçi dizisinde olacaktır. (Düzeltmek için setMap yöntemimi düzenleyebilirsiniz, ancak oluk işaretçileri dizisini döngü ve başvuruyu kaldırma pahasına)

1
+1 Benden. Ancak addMarker'ı otomatik olarak aramak için sarıcıyı eklediyseniz cevabınız daha iyi olurdu!
Andrew

Aslında Andrews cevabından bahsettiğinizi varsayıyorum. Farklı olarak ne yapacağınızı ve nedenini kodla gösterir misiniz? Teşekkürler
mp_

Meh gecikme için özür dilerim, hızlı bir şekilde test etmek için hiçbir yolu yoktu çünkü kod gönderme geri tutuyordu.
Maiku Mori

Teşekkürler Maiku. Yine de anlamıyorum - örneğinize nasıl yeni bir işaretçi ekleyebilirim. Yine çok teşekkürler!
mp_

1
SetMap (null) kullanarak denedim, ancak otomatik güncelleme komut dosyası vardı ve her 50 işaretleyicimin tamamını boş bir haritaya ayarladığımda, DOM'da bir yerde dolaşan bir sürü haritasız işaretçi vardı. Bu, sayfanın kilitlenmesine neden oldu, çünkü her 30 saniyede bir DOM'a 50 yeni işaretçi ekledi ve sayfa bir video duvarında 7/24 açık kaldığı için bu durmadan yayıldı. En yeni yanıtı kullanmak ve yenilerini oluşturmadan önce DOM'daki tüm harita yer paylaşımlarını tamamen temizlemek zorunda kaldım. Umarım bu birine yardımcı olur; sayfamın neden çöktüğünü öğrenmem uzun sürdü! :(
InterfaceGuy

23

Bu, YingYang Mar 11 '14 tarafından 15: 049 tarihinde kullanıcılar tarafından orijinal sorunun orijinal yanıtı altında yayınlanan tüm çözümlerin en basitiydi

2,5 yıl sonra aynı çözümü google maps v3.18 ile kullanıyorum ve bir cazibe gibi çalışıyor

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'te bir tane olduğunu düşünmüyorum, bu yüzden yukarıdaki özel uygulamayı kullandım.

Yasal Uyarı: Ben bu kodu yazmadı ama ben nereden geldiğini bilmiyorum böylece benim kod tabanı içine birleştirildiğinde bir referans tutmak unuttum.


+1 Benden. Ben addMarker otomatik olarak çağıran google.maps.Marker yapıcı (veya setMap yöntemini dahili olarak çağırdığından beri setMap yöntemi) etrafında bir sarmalayıcı eklemek istiyorum, ama yine de güzel cevap :).
Maiku Mori

@ Maiku Mari, neyi farklı yapacağınızı ve nedenini kodla gösterir misiniz? Teşekkürler
mp_

Çözüm nasıl değil? İşaretleyicileri temizlemek için belirli bir işaretleyicide set_map (null) kullanarak kaldırırsanız, tümünü temizlemek ve sonra bu işlevi kullanarak döngü oluşturursunuz. Daha fazla bir şey istiyorsanız buradan isteyin: code.google.com/p/gmaps-api-issues/issues/…
Petrogad


6
-1 Kötü stil. Oluşturulan yalnızca bir işaretçi dizisi vardır, ancak clearMarkers'tan sonra harita başına bir tane vardır (prototiplerde get / set farkının nedeni). Birden fazla harita nesnesi ile kötü böcek.
Tomas

18

Yeni sürüm v3'te, dizilerde kalmasını tavsiye ettiler. aşağıdaki gibi.

Bindirmeye genel bakıştaki örneğe bakın .

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'ın Demo Galerisi'nin nasıl yaptıklarıyla ilgili bir demosu var:

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

İşaretçileri nasıl eklediklerini görmek için kaynak kodunu görüntüleyebilirsiniz.

Uzun lafın kısası, belirteçleri küresel bir dizide tutarlar. Bunları silerken / silerken, dizi boyunca döngü yaparlar ve verilen işaretleyici nesnesinde ".setMap (null)" çağırırlar.

Ancak, bu örnek bir 'numara' gösterir. Bu örnek için "Temizle", bunları haritadan kaldırmak, ancak dizide tutmak anlamına gelir; bu da uygulamanın bunları haritaya hızlı bir şekilde yeniden eklemesine olanak tanır. Bir bakıma, bu onları “gizlemek” gibi davranır.

"Sil" diziyi de temizler.


6
for (i in markersArray) {
  markersArray[i].setMap(null);
}

yalnızca IE üzerinde çalışıyor.


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

krom, firefox, yani ...



6

Çözüm oldukça kolaydır. Sen yöntemini kullanabilirsiniz: marker.setMap(map);. Burada, iğnenin hangi haritada görüneceğini tanımlarsınız.

Bu nedenle, nullbu yöntemi ( marker.setMap(null);) ayarlarsanız , pim kaybolur.


Artık haritanızdaki tüm işaretçileri yok ederken bir işlev cadı yazabilirsiniz.

Pinlerinizi bir diziye koymak ve markers.push (your_new pin)örneğin veya bu kodla bildirmek için ekleyin :

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

Bu, haritadaki dizinizin tüm işaretleyicilerini ayarlayabilen veya yok edebilen bir işlev cadıdır:

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

Tüm işaretçilerinizi ortadan kaldırmak için işlevi şu şekilde çağırmalısınız null:

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

Ve tüm işaretçilerinizi kaldırmak ve ortadan kaldırmak için, işaretçi dizinizi şu şekilde sıfırlamanız gerekir:

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

Bu benim tam kodum. Düşürebileceğim en basit şey bu. Kodda google API'nızla değiştirebileceğinize dikkatYOUR_API_KEY edin:

<!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 geliştiricisine veya ayrıca Google geliştirici web sitesindeki belgelerin tamamına başvurabilirsiniz .


5

Rolinger'ın cevabının temiz ve kolay bir uygulaması.

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

Burada işaretçileri nasıl kaldıracağınıza ilişkin bir örnek bulabilirsiniz:

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

Anon'dan aşağıdakiler mükemmel şekilde çalışır, ancak katmanları tekrar tekrar temizlerken titriyor.

Sadece aşağıdakileri yapın:

I. Global bir değişken belirtiniz:

var markersArray = [];

II. Bir fonksiyon tanımlayın:

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

III. Aşağıdakileri çağırmadan önce 'markerArray' içindeki işaretçileri itin:

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

IV. Gerektiğinde clearOverlays()işlevi çağırın .

Bu kadar!!

Umarım bu sana yardımcı olur.


1
for(in in markersArray){}muhtemelen yapmasını beklediğiniz şeyi yapmaz. Eğer Arraykodda başka bir yerde uzatılır buna da bu özellikleri sürekli tekrarlanması ve sadece endeksler edeceğiz. Bunun javascript sürümü markersArray.forEach()her yerde desteklenmiyor. Sen daha iyi olurdufor(var i=0; i<markersArray.length; ++i){ markersArray.setMap(null); }
Kit Sunde

3

En kolay yol olarak google-maps-utility-library-v3 projesinde markermanager kütüphanesini kullanarak buldum.

1. MarkerManager'ı kurun

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

2. MarkerManager'a işaretçiler ekleyin

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

3. İşaretçileri silmek için sadece MarkerManger clearMarkers()işlevini çağırmanız gerekir.

mgr.clearMarkers();

İşaretçileri temizlemek için o kütüphaneyi içeri çekmek çok fazla abartılı gibi görünüyor. Tüm clearMarkersyapmak marker.setMap(null)(i kaynağı kontrol) işaretleri üzerinde yineleme yapmak . Onları bir diziye koymak ve kendiniz yapmak daha az iş olurdu.
Kit Sunde

3

Siz de bu şekilde yapabilirsiniz:

function clearMarkers(category){ 
  var i;       

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

2

Ben sadece kmlLayer.setMap (null) ile denedim ve çalıştı. Bunun normal işaretçilerle çalışıp çalışmadığından emin değilsiniz, ancak düzgün çalışıyor gibi görünüyor.


2

Poliler, işaretleyiciler vb.Dahil olmak üzere tüm bindirmeleri temizlemek için ...

sadece kullanın:

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

İşte bunu bir harita uygulamasında form oluşturmak için yazdığım bir fonksiyon:

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

bu haritayı da sıfırlamaz mı? kullanıcının haritayı yeni bir alana sürükleyip sürüklemediğini varsayalım?
Kichu

2

Tüm işaretçileri haritadan kaldırmak için aşağıdaki gibi işlevler oluşturun:

1.addMarker (konum): haritaya işaretçi eklemek için kullanılan bu işlev

2.clearMarkers (): bu işlev diziden değil tüm işaretçileri haritadan kaldırır

3.setMapOnAll (harita): diziye işaretçi bilgileri eklemek için kullanılan bu işlev

4..deleteMarkers (): bu işlev Dizideki tüm işaretçileri bunlara yapılan başvuruları silerek siler.

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

Bunu yapmanın en temiz yolu haritanın tüm özelliklerini tekrarlamaktır. İşaretçiler (çokgenler, çoklu çizgiler, vb. İle birlikte) haritanın veri katmanında saklanır .

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

İşaretçilerin çizim yöneticisi aracılığıyla eklenmesi durumunda, global bir işaretleyici dizisi oluşturmak veya işaretleyicileri oluşturma sırasında veri katmanına şu şekilde itmek en iyisidir:

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

Daha sonra diğer google.maps.data sınıfı yöntemlerini kullanmanıza izin verdiği için ikinci yaklaşımı öneririm.



0

Nedenini bilmiyorum, ama setMap(null)işaretçilerimi ayarlamak benim için işe yaramadı DirectionsRenderer.

Benim durumumda setMap(null)benim DirectionsRendererde aramam gerekiyordu .

Bunun gibi bir şey:

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

İşaretçiler üzerinde gezinin ve haritadan kaldırın, bundan sonra boş haritalar işaretçileri dizisi:

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


0

Önerilen tüm çözümleri denedim, ancak tüm işaretçilerim bir kümenin altındayken benim için hiçbir şey işe yaramadı. Sonunda ben sadece koymak:

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();

Başka bir deyişle, işaretleyicileri bir kümeye sararsanız ve tüm işaretçileri kaldırmak istiyorsanız, şunu çağırırsınız:

clearMarkers();

-1

Onları gizlerken veya silerken kaldırmak mı istiyorsun?

saklanıyorsa:

function clearMarkers() {
            setAllMap(null);
        }

silmek isterseniz:

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

Bunları takip etmek ve manuel olarak sıfırlamak için bir dizi işaretçileri kullandığımı fark ettim.


-1

Haritayı bu işaretleyiciye null olarak ayarlamanız gerekir.

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

Basit bir çözüm buldum (sanırım):

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

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



-3

Bunun basit bir çözüm olduğunu biliyorum, ama yaptığım bu

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

Benim için her zaman çalışır.


2
$ ( "# map_canvas") html ( ""); aslında tüm harita div temiz silinir ve aynı zamanda jQuery dayanır böylece yanıtı hem aptal hem de yararsızdır.
Sam

Evet doğru. Haritayı ve işaretçileri
başlatın

Ancak mevcut işaretleri kaldırmak istediği haritayı yeniden başlatmak istemiyor ....
Sam

Ben sadece mevcut işaretleri kaldırmak için bulduğum yolu teklif ediyorum. En azından bir şans ver ve işe yarayıp yaramadığını söyle. Benim için çalışıyor
kronus

2
Harita işaretleyicilerini kaldırmak istemenin tüm amacı haritayı yeniden başlatmak zorunda kalmaktan kaçınmaktır, benimki gibi durumlar, haritayı çizdiğim ve tüm haritayı çizdiğim tüm bindirmeleri yeniden başlattığımda harita üzerinde çizim yapmak için googles çizim kitaplığı kullandığım anlamına geliyordu. tüm bindirmeleri saklamak ve yeniden eklemek için tek yol ortadan kaybolur, bu da gereksiz bir iştir. Haritayı yeniden işaretleyicileri kaldırmak değil yeniden sıfırdan yeniden işaretler.
Sam
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.