2017-06-20 6 views
1

私はAPIを呼び出し、数秒後に新しいマーカーをプロットします。新しいマーカーがプロットされますが、古いマーカーはまだ残っています。私は、新しいマーカーがプロットされたときに古いマーカーをクリアしたいです。ここに私のコードです。Googleマップ新しいマーカーがプロットされたときの古いマーカーをクリアする

var myMarkers = []; 
var i; 
var marker = new google.maps.Marker({ 
    position: new google.maps.LatLng(12.967086,77.746564), 
    map: map, 
});  
setInterval(function(){ 
     $.post(contextPath+"/api/getlocations", {} , function(data){ 
      var response = data; 
      var locations = response.locations; 
      var marker, i; 

      for (var i = myMarkers.length; i > 0; i--) { 
       myMarkers[i].setMap(null); 
      } 
      myMarkers = []; 
      for (i = 0; i < locations.length; i++) { 
       marker = new google.maps.Marker({ 
        position: new google.maps.LatLng(locations[i][1], locations[i][2]), 
        map: map 
       }); 

       google.maps.event.addListener(marker, 'click', (function(marker, i) { 
        return function() { 
         infowindow.open(map, marker); 
        } 
       })(marker, i)); 
       myMarkers.push(marker); 
      } 
     }); 
    }, 5000); 

*マップが初期化されます。

ご協力いただければ幸いです。マーカーコレクション

var myMarkers = []; 

は前にマーカーを作成、管理してくれてありがとう

+0

私はあなたが達成したいとは思っていません - "動きのあるマーカー"のように聞こえます。その場合は、関数の外に "var marker"を移動し、最初に(...)を削除し、marker.setMap(null)だけを取り除くと、 "移動するマーカー"として機能するはずです。 – jspassov

答えて

1

はクリア前の

for (i = 0; i < myMarkers.length; i++) { 

    myMarkers.[i].setMap(null); 
} 
myMarkers = []; 

..

marker = new google.maps.Marker({ 
       position: new google.maps.LatLng(locations[i][1], locations[i][2]), 
       map: map 
      }); 

//追加ウィンドウレベルでmyMarkersを宣言しますあなたのマーカーはあなたの刻印のコレクション

myMarkers.push(marker); 
+0

エラーが発生しました - Uncaught TypeError:未定義のプロパティ 'setMap'を読み取ることができません – ireng

+0

setMap(null)..tryのループの後にmyMarkersを追加するコードを更新しました。 – scaisEdge

+0

同じエラー - キャッチされないTypeError :未定義のプロパティ 'setMap'を読み取ることができません – ireng