OpenLayers-3 - source.clear() 的正确用法是什么

OpenLayers-3 - What is the correct usage of source.clear()

我有一张 ol 3.10.1 地图,其目标是动态重绘图层的特征。在到达那里的路上,我正在使用 source.clear() 函数。奇怪的是 source.clear() 实际上清除了图层中当前缩放级别的特征,但在放大或缩小时特征仍然存在。我是否以正确的方式使用 source.clear() 函数?请在下面找到我用于测试目的的代码片段。

        var image = new ol.style.Circle({
          radius: 5,
          fill: null,
          stroke: new ol.style.Stroke({color: 'red', width: 1})
        });

        var styles = {
          'Point': [new ol.style.Style({
            image: image
          })]};

        var styleFunction = function(feature, resolution) {
          return styles[feature.getGeometry().getType()];

        };  

        var CITYClusterSource = new ol.source.Cluster({
                source: new ol.source.Vector({
               url: 'world_cities.json',
                format: new ol.format.GeoJSON(),
                projection: 'EPSG:3857'
            }),
        })
        var CITYClusterLayer = new ol.layer.Vector({
            source: CITYClusterSource,
            style: styleFunction

        });

        setTimeout(function () { CITYClusterSource.clear(); }, 5000);

        var map = new ol.Map({
            target: 'map',
            renderer: 'canvas',
              layers: [
                new ol.layer.Tile({
                  source: new ol.source.OSM(),
                }),
                CITYClusterLayer
            ],
            view: new ol.View({
                center: ol.proj.transform([15.0, 45.0], 'EPSG:4326', 'EPSG:3857'),
                zoom:3
            })
        });

我正在使用 setTimout() 函数让这些功能在应该被清除之前显示几秒钟。

请指教

更新http://jsfiddle.net/jonataswalker/ayewaz87/

我忘了,OL 会为每个分辨率一次又一次地加载您的功能。因此,如果您想一劳永逸地删除,请使用自定义加载程序,请参阅 fiddle。

您的源是异步加载的,因此在准备就绪时设置超时:

CITYClusterSource.once('change', function(evt){
    if (CITYClusterSource.getState() === 'ready') {
        // now the source is fully loaded
        setTimeout(function () { CITYClusterSource.clear(); }, 5000);
    }
});

注意once方法,可以用on代替