Google Maps API v3: Cara menghapus semua spidol?

Di Google Maps API v2, jika saya ingin menghapus semua peta spidol, aku hanya bisa melakukan:

map.clearOverlays();

Bagaimana saya melakukan ini di Google Maps API v3?

Melihat Referensi API, it's tidak jelas bagi saya.

Mengomentari pertanyaan (7)

Cukup lakukan hal berikut:

I. Mendeklarasikan variabel global:

var markersArray = [];

II. Mendefinisikan 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;
}

III. Mendorong spidol di 'markerArray' sebelum memanggil berikut:

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

IV. Sebut clearOverlays(); atau peta.clearOverlays(); fungsi di mana pun diperlukan.

Yang's ini!!

Komentar (11)

Masalah yang sama. Kode ini doesn't bekerja lagi.

I've dikoreksi itu, perubahan clearMarkers metode 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 menyertakan rincian pada topik: https://developers.google.com/maps/documentation/javascript/markers#remove

Komentar (7)

Tampaknya bahwa tidak ada fungsi tersebut di V3 belum.

Orang-orang menyarankan untuk menjaga referensi untuk semua penanda anda pada peta dalam array. Dan kemudian ketika anda ingin menghapus mereka semua, hanya loop melalui array dan panggilan .setMap(null) metode pada masing-masing dari 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
Komentar (5)

Ini adalah yang paling sederhana dari semua solusi originally posted by YingYang Mar 11 '14 pada 15:049 di bawah asli tanggapan untuk pengguna asli pertanyaan

Saya menggunakan solusi yang sama 2.5 tahun kemudian dengan google maps v3.18 dan bekerja seperti pesona

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

// No need to clear the array after that.
Komentar (0)

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
Komentar (5)

Pada versi baru v3, Mereka dianjurkan untuk menjaga dalam array. sebagai berikut.

Lihat contoh di overlay-gambaran.

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

Solusinya cukup mudah. Anda dapat menggunakan metode: penanda.setMap(map);. Di sini, anda menentukan di mana peta pin akan muncul.

Jadi, jika anda menetapkan null dalam metode ini (penanda.setMap(null);), pin akan hilang.


Sekarang, anda dapat menulis fungsi penyihir sementara membuat hilang semua penanda di peta.

Anda hanya menambah masukan pin anda dalam array dan menyatakan mereka dengan spidol.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 fungsi penyihir dapat mengatur atau hilang semua penanda array dalam 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 menghilang semua penanda 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 hilang, semua penanda anda, anda harus me-reset anda para penanda seperti ini:

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

Ini adalah kode lengkap. Itu yang paling sederhana yang saya bisa mengurangi. Hati-hati penuh anda dapat mengganti YOUR_API_KEY di kode kunci google API:




  Remove Markers

     /* Always set the map height explicitly to define the size of the div
     * element that contains the map. */
     #map {
       height: 100%;
       }




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


Anda dapat berkonsultasi pengembang google atau dokumentasi lengkap pada, juga, google pengembang situs web.

Komentar (0)

Google's Demo Galeri demo tentang bagaimana mereka melakukannya:

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

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

Singkat cerita, mereka tetap spidol di global array. Ketika membersihkan/menghapus mereka, mereka loop melalui array dan menyebutnya ".setMap(null)" yang diberikan penanda objek.

Namun, contoh ini menunjukkan salah satu 'trik'. "Jelas" untuk contoh ini berarti menghapus mereka dari peta, tetapi menjaga mereka di dalam array, yang memungkinkan aplikasi untuk cepat kembali-tambahkan ke peta. Dalam arti, ini bertindak seperti "menyembunyikan" mereka.

"Hapus" membersihkan array juga.

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

ini hanya bekerja pada IE.



for (var i=0; i
Komentar (1)

Bersih dan mudah aplikasi rolinger's jawaban.

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

Di sini anda dapat menemukan contoh bagaimana untuk menghapus penanda:

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 = [];
}
Komentar (0)

"set_map" fungsi diposting di kedua jawaban yang muncul untuk tidak lagi bekerja di Google Maps API v3.

Aku bertanya-tanya apa yang terjadi

Update:

Tampaknya Google mengubah API mereka seperti itu "set_map" tidak "setMap".

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

Komentar (0)

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

Cukup lakukan hal berikut:

I. Mendeklarasikan variabel global:

var markersArray = [];

II. Mendefinisikan fungsi:

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

III. Mendorong spidol di 'markerArray' sebelum memanggil berikut:

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

IV. Sebut clearOverlays() fungsi di mana pun diperlukan.

Yang's ini!!

Harapan yang akan membantu anda.

Komentar (1)

Aku ditemukan dengan menggunakan markermanager perpustakaan di google-maps-utilitas-perpustakaan-v3 proyek sebagai cara termudah.

1. Mengatur MarkerManager

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

2. Menambahkan penanda untuk MarkerManager

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

3. Untuk menghapus penanda, anda hanya perlu memanggil MarkerManger's clearMarkers() fungsi

mgr.clearMarkers();
Komentar (1)

Anda dapat melakukannya dengan cara ini juga:

function clearMarkers(category){ 
  var i;       

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

Terbersih cara untuk melakukan ini adalah untuk iterate melalui semua fitur dari peta. Spidol (bersama dengan polygon, polyline, dll.) disimpan dalam lapisan data dari peta.

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

Dalam kasus bahwa penanda yang ditambahkan melalui menggambar manager, it's terbaik untuk membuat global array dari spidol atau mendorong spidol ke lapisan data pada penciptaan 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 kedua pendekatan itu memungkinkan anda untuk menggunakan google lainnya.maps.data kelas metode nanti.

Komentar (1)

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

cukup gunakan:

map = new google.maps.Peta(dokumen.getElementById("map_canvas"), myOptions);}

Berikut adalah fungsi yang saya tulis untuk melakukannya bentuk saya di 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"));
}
Komentar (1)

Saya hanya mencoba ini dengan kmlLayer.setMap(null) dan itu berhasil. Tidak yakin apakah itu akan bekerja dengan teratur spidol tapi muncul untuk bekerja dengan benar.

Komentar (0)

Untuk menghapus semua penanda dari peta membuat fungsi sesuatu seperti ini:

1.addMarker(lokasi): fungsi ini digunakan untuk menambahkan marker pada peta

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

3.setMapOnAll(peta): fungsi ini digunakan untuk menambahkan penanda info di array

4.deleteMarkers(): fungsi ini akan Menghapus semua penanda dalam array dengan menghapus referensi untuk 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 = [];
      }
Komentar (0)

Ini adalah metode Google sendiri menggunakan setidaknya satu sampel:

var markers = [];

// Clear out the old markers.
markers.forEach(function(marker) {
  marker.setMap(null);
});
markers = [];

Check Google sampel untuk menyelesaikan contoh kode:

https://developers.google.com/maps/documentation/javascript/examples/places-searchbox

Komentar (0)