Openlayers:如何判断地图上的图层是否可用

问题描述 投票:0回答:3

我有疑问。在openlayers中,我如何知道是否添加了图层或地图?例如,我有一个图层控件,以查看该图层在地图上是否可见。

在Leaflet中我这样使用它

my_layer_leaflet.on("add",function(){
);

在 openlayers 中?

var my_layer_openlayers = new ol.layer.Vector({
    title: 'MyLayer',
    visible: false,
    style: new ol.style.Style({
        image: new ol.style.Icon( ({
            anchor: [0.5, 26],
            anchorXUnits: 'fraction',
            anchorYUnits: 'pixels',
            src: 'legend/image.png'
        }))
    }),
    source:  new ol.source.Vector({
        format: new ol.format.GeoJSON(),
        url: function(extent) {
        return layer_geoserver;
        },
        strategy: ol.loadingstrategy.all,
    })
});
vector openlayers layer visible
3个回答
2
投票
const isLayerExistsInMap = map.getLayers().getArray().includes(layer)

这对我有用,不太确定这是否是您所要求的。


0
投票

将单个图层放入图层组中,并向“change:layergroup”事件添加侦听器:

var baseLayerGroup = new ol.layer.Group({layers: [layer_geoserver]});     
map.on("change:layergroup", function() {console.log("LayerGroup changed.")});
map.setLayerGroup(baseLayerGroup);

0
投票

为了记录,我使用与@ori-yafe略有不同的方式检查图层的存在。事实上,我发现当在对象数组中查找图层对象是否存在时,

.includes()
方法总是返回 false。

所以我根据图层的独特属性(例如由用户定义)使用

.filter()

my_layer_openlayers.set('myID', 'someID');
const layerExistsInMap = map.getLayers().getArray().filter((layer) => layer.get('myID') == my_layer_openlayers.get('myID'));
if (layerExistsInMap.length > 0) {
  //Do something if layer already exists
}

为任何可能在之前的解决方案中遇到问题的人发布此解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.