複数のマーカーをまとめて地図上から削除する



Google Maps API v3では、マーカーのようなオーバーレイは、基本的にプログラム側で全て管理を行なわなければなりません。 Maps API v2で使われていたGMap2.clearOverlays()のような機能は用意されていません。 Maps API v3で、地図上のマーカーを削除するには、『Marker.setMap(null);』が基本です。 地図上の全てのマーカーを削除するには、1つ1つにこれを行なわなければなりません。

MVCArray.forEach は、複数の要素に対して一括で処理をしたいときに役立ちます。 forEachにはコールバック関数を指定でき、引数には「配列の要素」と「インデックス」が渡されます。 例えば、下記のコードの例では、マーカーに対して一括でsetMap を実行しています。

var marker_list = new google.maps.MVCArray();
marker_list.push(marker1);
marker_list.push(marker2);
 :

marker_list.forEach(function(mkr, idx){
  mkr.setMap(map);
});

同じ要領で、あらかじめマーカーのリストを作成しておき、MVCArray.forEach で全マーカーに対して、 marker.setMap(null)を実行することで、地図上から全てマーカーを削除することが可能になります。

コード

<script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?sensor=false&hl=ja"></script>
<script type="text/javascript">
  var map_canvas, marker_list;
  function initialize() {
    //マーカーを管理するためのmarker_list
    marker_list = new google.maps.MVCArray();

    var initPos = new google.maps.LatLng(35.127152, 138.910627);
    var myOptions = {
      noClear : true,
      center : initPos,
      zoom : 5,
      mapTypeId : google.maps.MapTypeId.ROADMAP
    };
    map_canvas = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
    google.maps.event.addListenerOnce(map_canvas, "bounds_changed", load);
  };
  
  function load(){
    //適当にマーカーを作成
    var bounds = map_canvas.getBounds();
    var sw = bounds.getSouthWest();
    var ne = bounds.getNorthEast();
    for(var i = 0; i < 10; i++) {
      var lat = Math.random() * (ne.lat() - sw.lat()) + sw.lat();
      var lng = Math.random() * (ne.lng() - sw.lng()) + sw.lng();
      var latlng = new google.maps.LatLng(lat, lng);
      
      
      //マーカーを作成したら marker_list に追加
      var marker = createMarker(map_canvas, latlng);
      marker_list.push(marker);
    }
  }
  function createMarker(map, latlng) {
    var marker = new google.maps.Marker();
    marker.setPosition(latlng);
    marker.setMap(map);
    return marker;
  }
  function removeMarkers() {
    //ボタンが押されたら、マーカーの配列に対して
    //setMap(null)を実行し、地図から削除
    marker_list.forEach(function(marker, idx) {
      marker.setMap(null);
    });
  }
  google.maps.event.addDomListenerOnce(window, "load", initialize);
</script>


<div id="map_canvas" style="width:500px; height:500px"></div>
<input type="button" onclick="removeMarkers();" value="マーカーを全て削除する"><br>





サイト内検索
Google Maps APIプログラミングガイド

Google Maps API Expert 4人が共著で執筆。中級者向けに実用に役立つサンプルを中心に紹介! スマートフォン時代に合わせたGoogle Maps APIの使い方も掲載。
詳しくはこちら
Google Maps APIプログラミング入門
Google Maps APIプログラミング入門
全480ページ。Google Maps API ver.2, ver.3, for Flash, Static Maps API v2, Google Maps API Primery, ライセンス…など、Google Maps APIに関連する幅広い内容の本を書きました。
このサイトで公開しているサンプルはもちろん、本のために作ったサンプルも満載です。
詳しくはこちら