Google Maps API v3: Jak usunąć wszystkie markery?


429

W Google Maps API v2, gdybym chciał usunąć wszystkie znaczniki mapy, mógłbym po prostu:

map.clearOverlays();

Jak to zrobić w Google Maps API v3 ?

Patrząc na API referencyjne , nie jest dla mnie jasne.


3
Znalazłem trochę kodu pod linkiem poniżej, ale święta krowa - to dużo kodu do symulacji poprzedniej 1 linii kodu w v2 API. lootogo.com/googlemapsapi3/markerPlugin.html
mp_

2
pamiętaj, że mapy 3.0 mają być BARDZO lekkie, aby urządzenia mobilne mogły z nich korzystać z jak najmniejszym opóźnieniem ...
Petrogad,

1
Sugerowane tutaj rozwiązania wydają się być zepsute na dzień 2010/07/29. Chciałbym zamiast tego mieć działającą wersję do zasugerowania.
Jonathan Hanson

9
Najwyżej oceniana odpowiedź jest błędna. Zobacz źródło na tym przykładzie, aby zobaczyć, jak to zrobić: google-developers.appspot.com/maps/documentation/javascript/…
Seb Ashton

Odpowiedzi:


487

Po prostu wykonaj następujące czynności:

I. Zadeklaruj zmienną globalną:

var markersArray = [];

II. Zdefiniuj funkcję:

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

LUB

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

III. Wciśnij markery w „markerArray” przed wywołaniem następującego:

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

IV. Wywołaj funkcję clearOverlays();lub map.clearOverlays();tam, gdzie jest to wymagane.

Otóż ​​to!!


32
for..w pętli z tablicą? to nie może być z pewnością dobre? ..see: stackoverflow.com/questions/500504/...
Zack

4
Alternatywnie możesz ukryć znaczniki za pomocą markera.setVisible (false)
NBK

12
Znaczniki są nadal przechowywane w tablicy, więc będzie rosła i rosła. Sugerowałbym również wyczyszczenie tablicy po pętli
Ami

5
zawsze możesz ustawić markersArraypustą tablicę zamiast ustawiać jej długość, co markersArray = [];
wydaje mi się

11
Chciałbym użyć whilepodejście do przetwarzania tablicę: while(markersArray.length) { markersArray.pop().setMap(null); }. Po tym nie ma potrzeby czyszczenia tablicy.
YingYang,

84

Taki sam problem. Ten kod już nie działa.

Naprawiłem to, zmieniam metodę clearMarkers w ten sposób:

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

Dokumentacja została zaktualizowana o szczegółowe informacje na ten temat: https://developers.google.com/maps/documentation/javascript/markers#remove


1
Sposób, w jaki w końcu go uruchomiłem, polegał na iteracji w kolekcji znaczników, w której je zapisałem, i użyciu setMap (null)
Sebastian,

4
Ale czy to usuwa markery z pamięci? Zdaję sobie sprawę, że JavaScript ma automatyczne zbieranie śmieci, ale skąd wiemy, że interfejs API Google'a nie przechowuje odwołania do znacznika po wywołaniu setMap (null)? W mojej aplikacji dodaję i „usuwam” mnóstwo markerów i nienawidzę tego, że te „usunięte” markery zasysają pamięć.
Nick

@Nick: dodaj „usuń to. Znaczniki [i];” po bicie setMap (null).
DaveS

4
Odpowiedź na to pytanie znajduje się teraz w dokumentacji. code.google.com/apis/maps/documentation/javascript/…
lashleigh

1
Kto nawet używa new Array();?
Rihards,

47

Wygląda na to, że w V3 nie ma jeszcze takiej funkcji.

Ludzie sugerują, aby przechowywać w tablicy odniesienia do wszystkich znaczników, które masz na mapie. A jeśli chcesz usunąć je wszystkie, po prostu przejdź przez tablicę i wywołaj metodę .setMap (null) dla każdego z odniesień.

Zobacz to pytanie, aby uzyskać więcej informacji / kodu.

Moja wersja:

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 jest edytowaną wersją tego kodu http://www.lootogo.com/googlemapsapi3/markerPlugin.html Usunąłem potrzebę ręcznego wywoływania addMarker.

Plusy

  • W ten sposób kod jest kompaktowy i znajduje się w jednym miejscu (nie zanieczyszcza przestrzeni nazw).
  • Nie musisz już samodzielnie śledzić znaczników, zawsze możesz znaleźć wszystkie znaczniki na mapie, wywołując map.getMarkers ()

Cons

  • Używanie prototypów i opakowań tak jak ja teraz uzależnia mój kod od kodu Google, jeśli dokonają zmiany burmistrza w swoim źródle, to się zepsuje.
  • Jeśli tego nie rozumiesz, nie będziesz w stanie tego naprawić, jeśli się zepsuje. Istnieje niewielkie prawdopodobieństwo, że zmienią wszystko, co to zepsuje, ale nadal…
  • Jeśli usuniesz jeden marker ręcznie, odniesienie będzie nadal znajdować się w tablicy markerów. (Możesz edytować moją metodę setMap, aby to naprawić, ale kosztem zapętlenia tablicy markerów koryta i usunięcia odniesienia)

1
+1 ode mnie Ale Twoja odpowiedź byłaby lepsza, jeśli dołączysz opakowanie, aby automatycznie wywoływać addMarker!
Andrew,

Zakładam, że faktycznie odnosisz się do odpowiedzi Andrewsa. Czy pokażesz z kodem, co zrobiłbyś inaczej i dlaczego. Dzięki
mp_

Przepraszam za opóźnienie, powstrzymywałem się od opublikowania kodu, ponieważ nie miałem możliwości szybkiego przetestowania go.
Maiku Mori

Dzięki Maiku. Chociaż nie rozumiem - jak dodać nowy znacznik w twoim przykładzie. Jeszcze raz wielkie dzięki!
MP_

1
Próbowałem użyć setMap (null), ale miałem skrypt automatycznej aktualizacji i za każdym razem, gdy ustawiłem wszystkie 50 lub więcej moich znaczników na mapę zerową, wciąż miałem gdzieś w okolicy kilka pływających znaczników. Powodowało to awarię strony, ponieważ co 30 sekund dodawało ona 50 nowych znaczników do DOM, a to rozprzestrzeniało się w nieskończoność, ponieważ strona pozostawała otwarta 24/7 na ścianie wideo. Musiałem użyć najlepszej odpowiedzi i całkowicie usunąć wszystkie nakładki mapy z DOM przed utworzeniem nowych. Mam nadzieję, że to komuś pomoże; dużo czasu zajęło mi ustalenie przyczyny awarii mojej strony! :(
InterfaceGuy

23

Było to najprostsze ze wszystkich rozwiązań pierwotnie opublikowanych przez YingYang 11 marca 14 o 15: 049 pod oryginalną odpowiedzią na oryginalne pytanie użytkowników

Korzystam z tego samego rozwiązania 2,5 roku później z Google Maps v3.18 i działa jak urok

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

Nie wydaje mi się, żeby taki był w V3, więc użyłem powyższej niestandardowej implementacji.

Oświadczenie: Nie napisałem tego kodu, ale zapomniałem zachować odniesienie, kiedy połączyłem go z bazą kodu, więc nie wiem, skąd się wziął.


+1 ode mnie Dodałbym otoki wokół konstruktora google.maps.Marker (lub metody setMap, ponieważ myślę, że konstruktor wywołuje ją wewnętrznie), która automatycznie wywołuje addMarker, ale nadal ładna odpowiedź :).
Maiku Mori,

@Maiku Mari, pokażesz kodem, co zrobiłbyś inaczej i dlaczego. Dzięki
mp_

Jak to nie jest rozwiązanie? Markery usuwasz za pomocą set_map (null) na konkretnym markerze, który chcesz wyczyścić, jeśli chcesz wyczyścić wszystko, skorzystaj z tej funkcji. Jeśli chcesz czegoś więcej, poproś tutaj: code.google.com/p/gmaps-api-issues/issues/…
Petrogad


6
-1 Zły styl. Utworzona jest tylko jedna tablica markerów, ale jedna na mapę po clearMarkers (przyczyna różnicy get / set z prototypami). Paskudne błędy z wieloma obiektami mapy.
Tomas

18

W nowej wersji v3 zalecili trzymanie się tablic. jak następuje.

Zobacz próbkę w omówieniu nakładki .

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

Galeria demonstracyjna Google zawiera prezentację tego, jak to robią:

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

Możesz wyświetlić kod źródłowy, aby zobaczyć, jak dodają znaczniki.

Krótko mówiąc, utrzymują znaczniki w globalnej tablicy. Podczas ich usuwania / usuwania zapętlają tablicę i wywołują „.setMap (null)” na danym obiekcie znacznika.

Jednak ten przykład pokazuje jedną „sztuczkę”. „Wyczyść” w tym przykładzie oznacza usunięcie ich z mapy, ale utrzymanie ich w tablicy, co pozwala aplikacji na szybkie ponowne dodanie ich do mapy. W pewnym sensie działa to jak „ukrywanie” ich.

„Usuń” usuwa również tablicę.


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

działa tylko na IE.


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

działa na chrome, firefox, czyli ...


1
Proszę przeczytać pomoc dotyczącą formatowania kodu w SO
freefaller

6

Rozwiązanie jest dość łatwe. Można użyć metody: marker.setMap(map);. Tutaj określasz, na której mapie pojawi się pinezka.

Tak więc, jeśli ustawisz nulltę metodę ( marker.setMap(null);), pin zniknie.


Teraz możesz napisać funkcję wiedźmy, jednocześnie usuwając wszystkie znaczniki na mapie.

Po prostu dodajesz, aby umieścić piny w tablicy i zadeklarować je za pomocą markers.push (your_new pin)lub za pomocą tego kodu, na przykład:

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

Jest to funkcja, która może ustawić lub zniknąć wszystkie znaczniki twojej tablicy na mapie:

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

Aby usunąć wszystkie znaczniki, należy wywołać tę funkcję za pomocą null:

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

Aby usunąć i zniknąć wszystkie znaczniki, należy zresetować tablicę znaczników w następujący sposób:

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

To jest mój kompletny kod. To najprostszy do jakiego mógłbym się zredukować. Bądź ostrożny , możesz wymienićYOUR_API_KEY w kodzie kluczowym interfejsem API Google:

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

Możesz skonsultować się z programistą Google lub pełną dokumentację na stronie internetowej dla programistów Google .


5

Czyste i łatwe zastosowanie odpowiedzi rolingera.

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

Tutaj możesz znaleźć przykład usuwania markerów:

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

Poniższe z Anona działa idealnie, choć z migotaniem przy wielokrotnym usuwaniu nakładek.

Po prostu wykonaj następujące czynności:

I. Zadeklaruj zmienną globalną:

var markersArray = [];

II. Zdefiniuj funkcję:

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

III. Wciśnij markery w „markerArray” przed wywołaniem następującego:

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

IV. Wywołaj clearOverlays()funkcję, gdziekolwiek jest to wymagane.

Otóż ​​to!!

Mam nadzieję, że ci to pomoże.


1
for(in in markersArray){}prawdopodobnie nie robi tego, czego się spodziewasz. Jeśli Arrayzostanie rozszerzony gdziekolwiek indziej w kodzie, będzie iterował również te właściwości, a nie tylko indeksy. Wersja javascript, markersArray.forEach()która nie jest obsługiwana wszędzie. Lepiej byłoby zfor(var i=0; i<markersArray.length; ++i){ markersArray.setMap(null); }
Kit Sunde,

3

Znalazłem użycie biblioteki markermanager w projekcie google-maps-utility-library-v3 jako najprostszy sposób.

1. Skonfiguruj MarkerManager

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

2. Dodaj znaczniki do MarkerManager

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

3. Aby usunąć znaczniki wystarczy zadzwonić pod MarkerManger jest clearMarkers()funkcja

mgr.clearMarkers();

Wydaje się, że ściągnięcie tej biblioteki do czyszczenia znaczników jest dość przesadne. Wszystko, co clearMarkerstrzeba zrobić, to iterować wywołania markerów marker.setMap(null)(sprawdziłem źródło). Byłoby mniej pracy włożenie ich do tablicy i zrobienie tego sam.
Kit Sunde,

3

Możesz to zrobić w ten sposób:

function clearMarkers(category){ 
  var i;       

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

2

Właśnie próbowałem tego z kmlLayer.setMap (null) i zadziałało. Nie jestem pewien, czy działałoby to ze zwykłymi markerami, ale wydaje się działać poprawnie.


2

Aby usunąć wszystkie nakładki, w tym polisy, markery itp.

po prostu użyj:

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

Oto funkcja, którą napisałem, aby to zrobić, tworzy mnie w aplikacji mapowej:

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

czy to też nie zresetuje mapy? załóżmy, że użytkownik przeciągnął mapę do nowego obszaru?
Kichu,

2

Aby usunąć wszystkie znaczniki z mapy, utwórz funkcje podobne do następujących:

1.addMarker (lokalizacja): ta funkcja służy do dodawania znacznika na mapie

2.clearMarkers (): ta funkcja usuwa wszystkie znaczniki z mapy, a nie z tablicy

3.setMapOnAll (mapa): ta funkcja służy do dodawania informacji o znacznikach do tablicy

4.deleteMarkers (): ta funkcja usuwa wszystkie znaczniki w tablicy, usuwając odniesienia do nich.

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

Najczystszym sposobem na to jest iteracja wszystkich funkcji mapy. Znaczniki (wraz z wielokątami, poliliniami itp.) Są przechowywane w warstwie danych mapy.

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

W przypadku dodawania znaczników za pomocą menedżera rysunków najlepiej utworzyć globalną tablicę znaczników lub wepchnąć znaczniki do warstwy danych podczas tworzenia w następujący sposób:

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

Polecam drugie podejście, ponieważ pozwala ono później użyć innych metod klasy google.maps.data.



0

Nie wiem dlaczego, ale ustawienie setMap(null)moich znaczników nie działało dla mnie, gdy używam DirectionsRenderer.

W moim przypadku musiałem również zadzwonić setMap(null)do siebie DirectionsRenderer.

Coś w tym stylu:

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

Wystarczy przejść przez znaczniki i usunąć je z mapy, a następnie opróżnić tablicę znaczników map:

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


0

Próbowałem wszystkich proponowanych rozwiązań, ale nic nie działało dla mnie, gdy wszystkie moje markery znajdowały się w grupie. W końcu po prostu umieszczam to:

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

Innymi słowy, jeśli zawijasz znaczniki w klastrze i chcesz usunąć wszystkie znaczniki, wywołujesz:

clearMarkers();

-1

Masz na myśli usunięcie, jak je ukrywanie lub usuwanie?

jeśli ukrywasz:

function clearMarkers() {
            setAllMap(null);
        }

jeśli chcesz je usunąć:

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

zauważ, że używam znaczników tablic do śledzenia ich i resetowania ręcznego.


-1

Musisz ustawić mapę zerową na tym znaczniku.

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

Znalazłem proste rozwiązanie (myślę):

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

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



-3

Wiem, że może to proste rozwiązanie, ale to właśnie robię

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

Działa za każdym razem dla mnie.


2
$ („# map_canvas”). html („”); w rzeczywistości wyczyściłby całą mapę div, a także opiera się na jQuery, więc twoja odpowiedź jest zarówno głupia, jak i nieprzydatna.
Sam

Tak to jest poprawne. Zainicjuj mapę i znaczniki
kronus

Ale nie chce ponownie inicjować mapy, chce usunąć istniejące znaczniki ...
Sam

Po prostu oferuję sposób, w jaki znalazłem usuwanie istniejących znaczników. Przynajmniej daj mu szansę i powiedz, czy zadziałało, czy nie. To działa dla mnie
Kronus

2
Chodzi o to, aby usunąć znaczniki mapy, aby uniknąć konieczności ponownego inicjowania mapy, sytuacje takie jak moja oznaczały, że ponieważ korzystałem z biblioteki rysowania Google do rysowania na mapie, jeśli ją usunę i ponownie zainicjuję całą mapę we wszystkich narysowanych przeze mnie nakładkach znikają, jedynym sposobem na zatrzymanie jest przechowywanie wszystkich nakładek i ponowne ich dodawanie, co jest również dużą ilością niepotrzebnej pracy. Ponowna inicjalizacja mapy nie powoduje usunięcia znaczników, ponowne jej odtworzenie od zera NIE usuwa znaczników.
Sam
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.