从Leaflet地图中删除geoJSON

时间:2017-07-24 14:41:19

标签: javascript json leaflet layer

我有一个函数检索带有地震数据的JSON,我将其添加到Leaflet地图中,该地图在10秒后再次检索JSON(用于刷新数据):

function fetchQuake() {
        fetch('https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/all_hour.geojson')
        .then(function(res) {
            if (res.ok === true) {
                return res.json();
            } else {
                alert('Geojson request failed.');
            }
        })
        .then(function(quake) {
                L.geoJSON(quake, {
                    style: function(feature) {
                        return feature.properties && feature.properties.style;
                    },
                    onEachFeature: onEachFeature,
                    pointToLayer: function(feature, latlng) {
                        return L.circleMarker(latlng, {
                            radius: 8,
                            fillColor: "#ff7800",
                            color: "#000",
                            weight: 1,
                            opacity: 1,
                            fillOpacity: 0.8
                        });
                    }
                }).addTo(map);

            myQuakeTimeout = setTimeout(function() {
                fetchQuake();
            }, 10000);
        });
}

从这些点清除地图的功能:

function clearQuake() {
    clearTimeout(myQuakeTimeout);
    L.geoJSON().clearLayers();
}

使用这些代码,超时停止,但地震点不会离开地图,有什么问题?

1 个答案:

答案 0 :(得分:0)

使用此代码,永远不会调用clearQuake()函数,因此永远不会执行L.geoJSON().clearLayers()

这就是你的积分不会离开地图的原因。

如果要在添加新获取的点之前删除先前的点,可以执行以下操作:

/* ... */
.then(function(quake) {

    L.geoJSON().clearLayers();

    L.geoJSON(quake, {
        /* ... */
    }).addTo(map);

    myQuakeTimeout = setTimeout(fetchQuake, 10000);
});