3

私は多数の「同様の」質問を見てきましたが、解決策/回答のどれも私にとってはうまくいかないようです.少しこのように

<ul>
<li class="toggle" id="beaches">Item</li>
<li class="toggle" id="towns">Item</li>
<ul>

クリックすると、これらの配列を使用してマップにマーカーを設定します

jQuery -

$(".toggle").click(function(){
setMarkers(map,$(this).attr('id'));
});

var beaches = [
['Beach 1',38.285827, 20.611038, 4],
['Beach 2', 38.304958,20.604515, 5],
['Beach 3',38.301691,20.597649, 3]
];

var towns = [
['Town 1',38.343003, 20.535679, 4],
['Town 2',38.339334,20.545807, 5]
];

私の人口関数は次のようになります。

function setMarkers(map, locations) {
for (var i = 0; i < locations.length; i++) {
var newmarker = locations[i];
var myLatLng = new google.maps.LatLng(newmarker[1], newmarker[2]);
var marker = new google.maps.Marker({
position: myLatLng,
map: map,
title: newmarker[0],
zIndex: newmarker[3]
});
}

しかし、私が必要/やりたいことは、新しいマーカーを追加する前に、最初にすべてのマーカーをクリアすることです。提案してくださいありがとう

4

4 に答える 4

9

マーカーを保存setMap(null)し、すべてのマーカーを呼び出してマップから削除する必要があります。

次のようなことを試すことができます:

var setMarkers = (function() {
    var oldMarkers = null;
    return function(map, locations){
        //Clearing markers, if they exist
        if(oldMarkers && oldMarkers.length !== 0){
            for(var i = 0; i < oldMarkers.length; ++i){
                oldMarkers[i].setMap(null);
            }
        }
        //Adding new markers
        oldMarkers = [];
        for (var i = 0; i < locations.length; i++) {
            var newmarker = locations[i];
            var myLatLng = new google.maps.LatLng(newmarker[1], newmarker[2]);
            var marker = new google.maps.Marker({
               position: myLatLng,
               map: map,
               title: newmarker[0],
               zIndex: newmarker[3]
            });
            oldMarkers.push( marker );
        }
   };
})();
于 2012-05-17T07:04:51.683 に答える
1

たぶん、マーカーを含む空の配列を 1 つの関数を使用できます。

function clear(){
   if(locations){
        for(var i=0;i<location.length;i++){
            locations[i].setMap(null);
        }
        locations.length=0;
    }
}
于 2012-05-17T07:05:26.957 に答える
1

マーカーが配列に格納されていることを確認してから、削除するには次のようなことを行う必要があります

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

      }

したがって、コードは次のようになります

var markers [];

function setMarkers(map, locations) {
// remove all markers first 
removeMarkers();
for (var i = 0; i < locations.length; i++) {
var newmarker = locations[i];

var myLatLng = new google.maps.LatLng(newmarker[1], newmarker[2]);
var marker = new google.maps.Marker({
position: myLatLng,
map: map,
title: newmarker[0],
zIndex: newmarker[3]
});
//add to marker array 
markers.push(marker);
} 
于 2012-05-17T07:06:58.917 に答える
0

マーカーのグローバル配列を定義しsetMap(null)、マップを再作成する前に呼び出してそれらをクリアできます。

var markers = [];

function setMarkers(map, locations) {
    for (var i = 0; i < locations.length; i++) {
        var newmarker = locations[i];
        var myLatLng = new google.maps.LatLng(newmarker[1], newmarker[2]);

        if (markers[i]) {
            markers[i].setMap(null);
        }

        markers[i] = new google.maps.Marker({
            position: myLatLng,
            map: map,
            title: newmarker[0],
            zIndex: newmarker[3]
        });
    }
}
于 2012-05-17T07:05:25.490 に答える