Openlayers 3 如何检测视图OpenLayers中的每个层3

Openlayers 3 如何检测视图OpenLayers中的每个层3,openlayers-3,Openlayers 3,我试图检测在地图视图中看到的所有图层(OpenLayers 3)。 我尝试过这种方法,但它只适用于一个像素 map.forEachLayerAtPixel(evt.pixel, function(layer){ // And I edit the layer... }); 有什么功能可以让我做吗 谢谢。您应该能够在图层之间循环,并检查范围是否与视图范围相交。这将至少为您获得当前视图中具有一些像素的层 var viewExtent = map.getView().calc

我试图检测在地图视图中看到的所有图层(OpenLayers 3)。 我尝试过这种方法,但它只适用于一个像素

map.forEachLayerAtPixel(evt.pixel, function(layer){ 
       // And I edit the layer...
    });
有什么功能可以让我做吗


谢谢。

您应该能够在图层之间循环,并检查范围是否与视图范围相交。这将至少为您获得当前视图中具有一些像素的层

var viewExtent = map.getView().calculateExtent(map.getSize());
var layersInView = [];
map.getLayers().forEach(function (layer) {
  var layerExtent = layer.getExtent();

  if (ol.extent.intersects(layerExtent, viewExtent)) {
    layersInView.push(layer);
  }
});

我不确定您如何判断用户是否真正可以看到某个图层,但这可能会让您更接近它。

请参阅:对我不起作用……因为在本例中,我获得了地图中的所有图层。但是在我的例子中,我只想要用户在地图视图中看到的图层。
getExtent()
对我不起作用,所以我不得不用
layer.getSource().c.extent
如果层源为
ol.source.ImageStatic
,则解决方案可以正常工作,但如果是WMS层,则无法工作。谢谢