【问题标题】:OpenLayers - LayerSwitcher change visibilityOpenLayers - LayerSwitcher 改变可见性
【发布时间】:2021-12-22 13:27:33
【问题描述】:

我正在开发一个基于 Angular 的应用程序,它使用 OpenLayers 在地图上显示给定数据。

对于这张地图,我使用的是 LayerSwitcher (ol-ext.control.LayerSwitcher):

const layerSwitcher = new LayerSwitcher({
        tipLabel: 'Layers',
        trash: false,
        width: 800
    });
this.map.addControl(layerSwitcher);

我还有一个 LayerGroup,我正在向其中动态添加矢量图层。所有这些图层都可以通过 LayerSwitcher 一层一层地选择/取消选择,也可以通过勾选整个 LayerGroup 的复选框来选择/取消选择。

我希望有这样的功能,当在 LAyerSwitcher 中单击一个矢量图层以选择/取消选择(红色圆圈标记为勾号)时,我想对我的地图对象进行一些操作。 我添加了一个监听器,用于更改可见性事件:

const vectorLayer = this.myFunctionToGetTheLayer(input1, input2);
vectorLayer.on('change:visible', function () {
    console.log('selected')
});
this.layerGroup.getLayers().push(vectorLayer);

这很好用,当我单击 LayerSwitcher 中的复选框时,控制台上的日志就会消失。

但我想要的不是日志,而是这样的:

...this.map.getLayers()...

但是this.map 在这个函数中是未定义的。

有没有什么方法可以在监听图层变化事件的同时对整个地图进行操作?

【问题讨论】:

    标签: angular openlayers openlayers-6


    【解决方案1】:

    函数有它自己的上下文,所以没有 map 属性。 尝试使用具有其父上下文的箭头函数

    vectorLayer.on('change:visible', () => {
       console.log('selected')
       ... this.map ... etc
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-02-04
      • 2021-09-03
      • 1970-01-01
      • 2016-07-20
      • 2011-04-10
      • 2012-04-07
      • 2013-07-30
      相关资源
      最近更新 更多