Google Maps API v3: Bagaimana cara menghapus semua penanda?

429

Di Google Maps API v2, jika saya ingin menghapus semua penanda peta, saya bisa melakukannya:

map.clearOverlays();

Bagaimana saya melakukan ini di Google Maps API v3 ?

Melihat API Referensi , tidak jelas bagi saya.

mp_
sumber
3
Saya menemukan beberapa kode pada tautan di bawah ini, tetapi sapi suci - adalah bahwa banyak kode untuk mensimulasikan 1 baris kode sebelumnya dalam v2 API. lootogo.com/googlemapsapi3/markerPlugin.html
mp_
2
ingat bahwa peta 3.0 dimaksudkan untuk menjadi SANGAT ringan agar perangkat seluler dapat menggunakannya sesedikit mungkin ...
Petrogad
1
Solusi yang disarankan di sini tampaknya rusak pada 2010/07/29. Saya berharap saya memiliki versi yang berfungsi untuk menyarankan sebagai gantinya.
Jonathan Hanson
9
Jawaban dengan nilai tertinggi salah. Lihat sumber pada contoh ini untuk melihat bagaimana melakukannya: google-developers.appspot.com/maps/documentation/javascript/…
Seb Ashton

Jawaban:

487

Cukup lakukan hal berikut:

I. Menyatakan variabel global:

var markersArray = [];

II Tentukan fungsi:

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

ATAU

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

AKU AKU AKU. Tekan penanda di 'markerArray' sebelum memanggil yang berikut:

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

IV. Panggil fungsi clearOverlays();atau di map.clearOverlays();mana pun diperlukan.

Itu dia!!

anon
sumber
32
for..in loop dengan Array? ini tidak bisa baik tentunya ..? ..see: stackoverflow.com/questions/500504/…
zack
4
Atau Anda dapat menyembunyikan marker menggunakan marker.setVisible (false)
NBK
12
Marker masih disimpan dalam array sehingga akan tumbuh lebih besar dan lebih besar. Sarankan membersihkan array juga setelah loop
Ami
5
Anda selalu dapat mengatur markersArrayke array kosong daripada mengatur panjangnya, yang saya temukan agak aneh:markersArray = [];
hellatan
11
Saya akan menggunakan whilependekatan untuk memproses array: while(markersArray.length) { markersArray.pop().setMap(null); }. Tidak perlu menghapus array setelah itu.
YingYang
84

Permasalahan yang sama. Kode ini tidak berfungsi lagi.

Saya telah memperbaikinya, ubah metode clearMarkers dengan cara ini:

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

Dokumentasi telah diperbarui untuk memasukkan rincian tentang topik: https://developers.google.com/maps/documentation/javascript/markers#remove

Pons
sumber
1
Cara saya akhirnya membuatnya berfungsi adalah untuk beralih melalui koleksi spidol di mana saya menyimpannya dan menggunakan setMap (null)
Sebastian
4
Tetapi apakah ini menghapus penanda dari memori? Saya menyadari bahwa JavaScript memiliki pengumpulan sampah otomatis, tetapi bagaimana kita tahu bahwa Google API tidak memiliki referensi ke penanda ketika setMap (null) dipanggil? Dalam aplikasi saya, saya menambahkan dan "menghapus" satu ton marker, dan saya akan membenci semua marker "dihapus" yang menghabiskan memori.
Nick
@Nick: tambahkan 'delete this.markers [i];' setelah bit setMap (null).
DaveS
4
Pertanyaan ini dijawab dalam dokumentasi sekarang. code.google.com/apis/maps/documentation/javascript/…
lashleigh
1
Siapa yang menggunakan new Array();?
Rihards
47

Tampaknya belum ada fungsi seperti itu di V3.

Orang-orang menyarankan untuk menyimpan referensi ke semua penanda yang Anda miliki di peta dalam sebuah array. Dan kemudian ketika Anda ingin menghapus em semua, cukup loop melalui array dan panggil metode .setMap (null) pada masing-masing referensi.

Lihat pertanyaan ini untuk info lebih lanjut / kode.

Versi saya:

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

Kode ini adalah versi yang diedit dari kode ini http://www.lootogo.com/googlemapsapi3/markerPlugin.html Saya menghapus kebutuhan untuk memanggil addMarker secara manual.

Pro

  • Melakukan hal ini Anda menjaga kode tetap kompak dan di satu tempat (tidak mencemari namespace).
  • Anda tidak perlu melacak penanda sendiri lagi, Anda selalu dapat menemukan semua penanda di peta dengan memanggil map.getMarkers ()

Cons

  • Menggunakan prototipe dan pembungkus seperti yang saya lakukan sekarang membuat kode saya tergantung pada kode Google, jika mereka membuat perubahan walikota dalam sumber mereka, ini akan rusak.
  • Jika Anda tidak memahaminya maka Anda tidak akan dapat memperbaikinya jika rusak. Kemungkinannya rendah bahwa mereka akan mengubah apa pun yang akan merusak ini, tapi tetap saja ..
  • Jika Anda menghapus satu marker secara manual, rujukannya masih dalam array marker. (Anda dapat mengedit metode setMap saya untuk memperbaikinya, tetapi dengan mengorbankan pengulangan array markers dan menghapus referensi)
Maiku Mori
sumber
1
+1 Dari saya. Tetapi jawaban Anda akan lebih baik jika Anda menyertakan bungkus untuk memanggil addMarker secara otomatis!
Andrew
Saya menganggap Anda mengacu pada jawaban Andrews sebenarnya. Apakah Anda menunjukkan dengan kode apa yang akan Anda lakukan berbeda dan mengapa. Terima kasih
mp_
Meh maaf atas keterlambatan, saya menahan diri dari memposting kode karena saya tidak punya cara untuk dengan cepat mengujinya.
Maiku Mori
Terima kasih, Maiku. Padahal, saya tidak mengerti - bagaimana cara menambahkan penanda baru dalam contoh Anda. Sekali lagi, terima kasih banyak!
mp_
1
Saya mencoba menggunakan setMap (null), tetapi saya memiliki skrip pembaruan otomatis, dan setiap kali saya mengatur semua 50 atau lebih dari penanda saya ke peta nol, saya masih memiliki banyak penanda peta yang mengambang di DOM di suatu tempat. Ini terus menyebabkan halaman mogok karena setiap 30 detik itu menambahkan 50 penanda baru ke DOM, dan ini diperbanyak tanpa henti karena halaman tetap buka 24/7 di dinding video. Saya harus menggunakan jawaban teratas dan menghapus semua overlay peta dari DOM sepenuhnya sebelum membuat yang baru. Semoga ini bisa membantu seseorang; butuh waktu lama bagi saya untuk mencari tahu mengapa halaman saya macet! :(
InterfaceGuy
23

Ini adalah yang paling sederhana dari semua solusi yang semula diposting oleh YingYang 11 Mar '14 pada 15: 049 di bawah tanggapan asli terhadap pertanyaan asli pengguna

Saya menggunakan solusi yang sama 2,5 tahun kemudian dengan google maps v3.18 dan itu berfungsi seperti pesona

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

// No need to clear the array after that.
rolinger
sumber
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();
};

Saya tidak berpikir ada satu di V3 jadi saya menggunakan implementasi kustom di atas.

Penafian: Saya tidak menulis kode ini tetapi saya lupa menyimpan referensi ketika saya menggabungkannya ke dalam basis kode saya jadi saya tidak tahu dari mana asalnya.

Andrew
sumber
+1 Dari saya. Saya akan menambahkan pembungkus di sekitar konstruktor google.maps.Marker (atau metode setMap karena saya pikir konstruktor memanggilnya secara internal) yang memanggil addMarker secara otomatis, tetapi jawaban tetap bagus :).
Maiku Mori
@Maiku Mari, maukah Anda menunjukkan dengan kode apa yang akan Anda lakukan berbeda dan mengapa. Terima kasih
mp_
Bagaimana ini bukan solusinya? Anda menghapus marker dengan menggunakan set_map (null) pada marker tertentu yang ingin Anda hapus, jika Anda ingin menghapus semuanya maka lakukan perulangan menggunakan fungsi ini. Jika Anda menginginkan sesuatu yang lebih, minta di sini: code.google.com/p/gmaps-api-issues/issues/…
Petrogad
Saya percaya itu datang dari sini lootogo.com/googlemapsapi3/markerPlugin.html
Maiku Mori
6
-1 Gaya buruk. Hanya ada satu larik penanda yang dibuat, tetapi satu per peta setelah clearMarkers (penyebab perbedaan get / set dengan prototipe). Bug jahat dengan banyak objek peta.
Tomas
18

Pada versi baru v3, Mereka merekomendasikan untuk tetap menggunakan array. sebagai berikut.

Lihat sampel di overlay-ikhtisar .

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;
  }
}
Jirapong
sumber
6

Galeri Demo Google memiliki demo tentang cara mereka melakukannya:

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

Anda dapat melihat kode sumber untuk melihat bagaimana mereka menambahkan penanda.

Singkat cerita, mereka menyimpan penanda dalam array global. Saat membersihkan / menghapusnya, mereka mengulang array dan memanggil ".setMap (null)" pada objek marker yang diberikan.

Namun, contoh ini menunjukkan satu 'trik'. "Clear" untuk contoh ini berarti menghapusnya dari peta tetapi menyimpannya dalam array, yang memungkinkan aplikasi untuk dengan cepat menambahkannya kembali ke peta. Dalam arti tertentu, ini bertindak seperti "menyembunyikan" mereka.

"Hapus" juga menghapus array.

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

hanya bekerja pada IE.


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

bekerja pada chrome, firefox, yaitu ...

Nguoi Viet Nam
sumber
1
Silakan baca bantuan mengenai pemformatan kode pada SO
freefaller
6

Solusinya cukup mudah. Anda dapat menggunakan metode: marker.setMap(map);. Di sini, Anda menentukan peta pin yang akan muncul.

Jadi, jika Anda mengatur nulldalam metode ini ( marker.setMap(null);), pin akan hilang.


Sekarang, Anda dapat menulis penyihir fungsi sambil menghilangkan semua penanda di peta Anda.

Anda cukup menambahkan untuk meletakkan pin Anda dalam array dan mendeklarasikannya dengan markers.push (your_new pin)atau kode ini misalnya:

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

Ini adalah penyihir fungsi yang dapat mengatur atau menghilangkan semua penanda array Anda di peta:

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

Untuk menghilangkan semua spidol Anda, Anda harus memanggil fungsi dengan null:

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

Dan, untuk menghapus dan menghilangkan, semua spidol Anda, Anda harus mengatur ulang susunan spidol Anda seperti ini:

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

Ini kode lengkap saya. Itu yang paling sederhana yang bisa saya kurangi. Hati-hati penuh Anda dapat mengganti YOUR_API_KEYkode dengan kunci Google API Anda:

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

Anda dapat berkonsultasi dengan google developer atau dokumentasi lengkap di, juga, situs web google developer .

SphynxTech
sumber
5

Aplikasi jawaban rolinger yang bersih dan mudah.

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) ;
    }
Adam Starrh
sumber
4

Di sini Anda dapat menemukan contoh cara menghapus spidol:

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 = [];
}
Freddie
sumber
3

Berikut ini dari Anon bekerja dengan sempurna, meskipun dengan berkedip ketika berulang kali membersihkan overlay.

Cukup lakukan hal berikut:

I. Menyatakan variabel global:

var markersArray = [];

II Tentukan fungsi:

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

AKU AKU AKU. Tekan penanda di 'markerArray' sebelum memanggil yang berikut:

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

IV. Panggil clearOverlays()fungsi itu di mana pun dibutuhkan.

Itu dia!!

Semoga itu bisa membantu Anda.

di suatu tempat
sumber
1
for(in in markersArray){}mungkin tidak melakukan apa yang Anda harapkan. Jika Arraydiperluas di tempat lain dalam kode itu akan beralih di atas properti itu juga, dan bukan hanya indeks. Versi javascript markersArray.forEach()yang tidak didukung di mana-mana. Anda akan lebih baik denganfor(var i=0; i<markersArray.length; ++i){ markersArray.setMap(null); }
Kit Sunde
3

Saya menemukan menggunakan markermanager library di proyek google-maps-utility-library-v3 sebagai cara termudah.

1. Atur MarkerManager

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

2. Tambahkan marker ke MarkerManager

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

3. Untuk penanda jelas Anda hanya perlu untuk memanggil MarkerManger ini clearMarkers()fungsi

mgr.clearMarkers();
Craig Fruin
sumber
Sepertinya cukup banyak kerja keras untuk menarik perpustakaan itu untuk membersihkan spidol. Yang clearMarkersharus dilakukan hanyalah beralih pada marker yang memanggil marker.setMap(null)(saya memeriksa sumbernya). Akan lebih sedikit pekerjaan menempatkan mereka dalam array dan melakukannya sendiri.
Kit Sunde
3

Anda dapat melakukannya dengan cara ini juga:

function clearMarkers(category){ 
  var i;       

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

Saya baru saja mencoba ini dengan kmlLayer.setMap (null) dan berhasil. Tidak yakin apakah itu akan berfungsi dengan spidol biasa tetapi tampaknya berfungsi dengan benar.

bokor
sumber
2

Untuk menghapus semua overlay termasuk polys, spidol, dll ...

cukup gunakan:

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

Berikut adalah fungsi yang saya tulis untuk melakukannya dari aplikasi peta:

  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"));
}
Akan
sumber
bukankah ini juga akan mengatur ulang peta? misalkan jika pengguna telah menyeret peta ke area baru?
Kichu
2

Untuk menghapus semua penanda dari peta, buat fungsi-fungsi seperti ini:

1.addMarker (lokasi): fungsi ini digunakan untuk menambahkan penanda di peta

2.clearMarkers (): fungsi ini menghapus semua penanda dari peta, bukan dari array

3.setMapOnAll (map): fungsi ini digunakan untuk menambahkan info marker dalam array

4.deleteMarkers (): fungsi ini Menghapus semua penanda dalam array dengan menghapus referensi kepada mereka.

// 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 = [];
      }
Bintang Rock
sumber
2

Cara terbersih melakukan ini adalah beralih ke semua fitur peta. Marker (bersama dengan poligon, polyline, dll.) Disimpan dalam lapisan data peta.

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

Jika marker ditambahkan melalui manajer gambar , yang terbaik adalah membuat array global marker atau mendorong marker ke dalam lapisan data pada kreasi seperti:

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

Saya merekomendasikan pendekatan kedua karena memungkinkan Anda untuk menggunakan metode kelas google.maps.data lainnya nanti.

Mimo
sumber
0

Saya tidak tahu mengapa, tetapi, menetapkan setMap(null)ke spidol saya tidak berfungsi untuk saya ketika saya menggunakan DirectionsRenderer.

Dalam kasus saya, saya harus menelepon setMap(null)ke saya DirectionsRendererjuga.

Sesuatu seperti itu:

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);
    }
});
Felipe Miosso
sumber
0

Cukup berjalan di atas spidol dan menghapusnya dari peta, kosongkan spidol peta setelah itu:

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

cukup bersihkan Googlemap

mGoogle_map.clear();
RejoylinLokeshwaran
sumber
0

Saya sudah mencoba semua solusi yang diusulkan, tetapi tidak ada yang berhasil ketika semua spidol saya berada di bawah satu cluster. Akhirnya saya hanya mengatakan ini:

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

Dengan kata lain, jika Anda membungkus marker dalam sebuah cluster dan ingin menghapus semua marker, Anda memanggil:

clearMarkers();
Geka P
sumber
-1

Maksud Anda menghapus seperti menyembunyikannya atau menghapusnya?

jika bersembunyi:

function clearMarkers() {
            setAllMap(null);
        }

jika Anda ingin menghapusnya:

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

perhatikan bahwa saya menggunakan penanda array untuk melacak mereka dan mengatur ulang secara manual.

RobertoN
sumber
-1

Anda perlu mengatur peta nol ke penanda itu.

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);
   }
Adhum
sumber
-1

Saya menemukan solusi sederhana (saya pikir):

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

function Clear(){
     marker.setMap(null);
}
aleXela
sumber
-1

Saya menggunakan tulisan cepat yang melakukan pekerjaan dengan baik. Kerjakan saja

    map.clear();
Uchenna Nnodim
sumber
-3

Saya tahu bahwa ini mungkin solusi yang sama, tetapi inilah yang saya lakukan

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

Bekerja setiap saat untuk saya.

kronus
sumber
2
$ ("# map_canvas"). html (""); sebenarnya akan menghapus seluruh peta div bersih dan juga bergantung pada jQuery sehingga respons Anda bodoh dan tidak membantu.
Sam
Ya itu benar. Inisialisasi peta dan spidol
kronus
Tapi dia tidak ingin menginisialisasi ulang peta yang dia ingin hapus penanda yang ada ....
Sam
Saya hanya menawarkan cara yang saya temukan untuk menghapus spidol yang ada. Setidaknya mencobanya dan katakan padaku apakah itu berhasil atau tidak. Ini bekerja untuk saya
kronus
2
Inti dari keinginan untuk menghapus penanda peta adalah untuk menghindari keharusan menginisialisasi ulang peta, situasi seperti milik saya berarti karena saya menggunakan googles menggambar perpustakaan untuk menggambar di peta jika saya menghapusnya dan menginisialisasi ulang seluruh peta semua overlay yang saya gambar. menghilang satu-satunya cara untuk menghentikan itu adalah untuk menyimpan semua overlay dan menambahkannya yang juga banyak pekerjaan yang tidak perlu. Inisialisasi ulang peta tidak menghilangkan spidol yang membuatnya kembali dari awal lagi TIDAK menghapus spidol.
Sam