3

リーフレット クラスター プラグインを使用して、多数のクラッシュをマップしています。ページをロードすると、すべてのクラッシュがマッピングされます (GeoJSON ファイルに保存されます)。また、年ごとに異なる geoJSON ファイルを読み込むボタンもあります。

私が直面している問題は、 removeLayer() が実際にレイヤーを削除していないことです。そのため、新しい GeoJSON ファイルを再マップすると、すべてのクラッシュが積み重なっていくだけです。

これらは、ボタンをクリックすると起動する 2 つの関数です。以下に示すように、 var マーカーはグローバル名前空間で定義されていますか (これは問題の一部である可能性があります)。

var markers = L.markerClusterGroup({spiderfyDistanceMultiplier: 1.3});

//Lay new data on map
function buildMarkers(yearData){
        var crashLayer = new L.geoJson(yearData, {
                onEachFeature: function (feature, layer) {
                    layer.bindPopup(feature.properties.year);
                }
        });
        markers.addLayer(crashLayer);
        map.addLayer(markers);

    }

//Remove ALL data on map        
function removeClusters(){
        map.removeLayer(markers)
    }

//AN example of a button
$("#twelve").click(function(e){
        e.preventDefault();
        $('a').removeClass('selected');
        $(this).addClass('selected');
        removeClusters();
        buildMarkers(twelveCrashes);
    });
4

2 に答える 2

15

ちょうどそれを理解しました。

マーカー変数からすべてのデータを消去するには、clearLayers() を使用しました。したがって、私の buildMarkers() 関数では、これを関数の最初の行に追加するだけです

markers.clearLayers();

これにより、すべてのデータが消去されます。

于 2013-09-09T20:54:39.583 に答える