我有疑问。在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,
})
});
const isLayerExistsInMap = map.getLayers().getArray().includes(layer)
这对我有用,不太确定这是否是您所要求的。
将单个图层放入图层组中,并向“change:layergroup”事件添加侦听器:
var baseLayerGroup = new ol.layer.Group({layers: [layer_geoserver]});
map.on("change:layergroup", function() {console.log("LayerGroup changed.")});
map.setLayerGroup(baseLayerGroup);
为了记录,我使用与@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
}
为任何可能在之前的解决方案中遇到问题的人发布此解决方案。