如何删除 Openlayers 3.3.0 中的单个叠加层?

How can I remove a single overlay in Openlayers 3.3.0?

我正在我的地图应用程序中创建叠加层,我需要每 5 秒刷新一次。我只是在使用下面的代码从我的地图中删除陈旧的叠加层时遇到了困难。 map.removeOverlay 方法似乎没有正常工作。仅几次迭代后,叠加层的堆叠就显而易见了。

使用 map.getOVerlays().clear() 删除陈旧的覆盖,但是,这会删除所有不需要的覆盖。感谢您对此提供任何帮助。

window.setInterval(function() {
 $.ajaxSetup({ mimeType: "text/plain" });
  $.getJSON('json/DATA.json', function(data) {
      $.each(data.item, function(key, val) {
         var storeName = this.name;
         var storeLocation = this.location;
         var storeLatitude = this.latitude;
         var storeLongitude = this.longitude;
           $.each(val.tasks, function(i, j){
             var taskName = this.name;
             var taskState = this.state;
               if (taskState == "Open") {
                var taskGeometry = ol.proj.transform([storeLongitude,storeLatitude], 'EPSG:4326', 'EPSG:3857');
                function createCircleOutOverlay(position) {
                var elem = document.createElement('div');
                elem.setAttribute('class', 'circleOut');

                return new ol.Overlay({
                    element: elem,
                    position: position,
                    positioning: 'center-center'
                });
            }
                var taskOverlay = createCircleOutOverlay(taskGeometry);
                map.removeOverlay(taskOverlay);
                map.addOverlay(taskOverlay);
                }
           });
      });
     });

}, 5000);
            var taskOverlay = createCircleOutOverlay(taskGeometry);
            map.removeOverlay(taskOverlay);

问题是您正在尝试删除新覆盖而不是旧覆盖。您必须存储对叠加层的引用,以便 OpenLayers 可以将其从地图中删除。类似于:

var currentOverlay = null;
window.setInterval(function() {
 $.ajaxSetup({ mimeType: "text/plain" });
                // ...
                if (currentOverlay === null) {
                  map.removeOverlay(currentOverlay);
                }
                currentOverlay = createCircleOutOverlay(taskGeometry);
                map.addOverlay(currentOverlay);
               // ...