繁体   English   中英

打开图层3层可见性 - 传递变量的问题

[英]Open Layers 3 layer visibility - problems passing variables

我有一个非常基本的功能,打开我在地图上的图层。

这是初始化图层的代码:

var featurelayer;

featurelayer = new ol.layer.Tile({
      name: 'featurelayer',
      source: new ol.source.TileWMS({url: 'http://myserver/geoserver/wms',
      serverType: 'geoserver',
      params:{
        'LAYERS':"layergroup:mylayer", 'TILED':true
      }
      }),
      visible: false
      });
map.addLayer(featurelayer);

我的网站上有一个列表项,当点击时会激活我用来尝试打开图层的功能。 我的html和jQuery函数如下:

<li class='last'><a href='#'><i class="fa fa-circle text-info"></i><span> Flood Zone 3b (Functional Floodplain)</span></a></li>

$("a.layer").click(function() {
  map.getLayers().forEach(function(layer) {
    if (layer.get('name') === this.id) {
      featurelayer.setVisible(true);
    }
  });
});

此代码实际上有效,它在地图上显示图层。 我的问题是我将有多个图层,理想情况下,我希望能够将我的列表项中的ID传递给我的setVisible事件,该ID与图层的名称相同。

我似乎无法解决如何执行此操作,因为我的控制台日志始终返回undefined; 我已经尝试创建一个变量,我相当于'this.id',但这不起作用 - 我是否需要通过我的点击功能传递我的ID? 如果注册我的图层名称与列表项ID相匹配,为什么我收到未定义的错误?

谢谢你提供的所有帮助!

是不是this.id尝试访问'layer.id'(可能是未定义的),因为它在forEach循环中?

尝试在进入循环之前获取id:

 $("a.layer").click(function () {
        var lid = $(this).attr('id');
        map.getLayers().forEach(function (layer) {
            if (layer.get('name') == lid) {
                layer.setVisible(true);
            }
        });
    });

编辑:这是你需要的吗? http://jsfiddle.net/fbma/3z1L6ttn/1/

我已经为两个li项添加了id,click事件与class'last'有关。 此外,还可以在迭代的图层对象上设置可见性。

我接受了Fbma的回答并添加了几个if语句,通过设置一个调用getVisible()方法的变量来检查图层是否已经可见,所以下面的代码现在正在工作,谢谢你的帮助!

$(".layerlist").click(function() {
        var lid = $(this).attr('id');
        map.getLayers().forEach(function (layer) {
            if (layer.get('name') == lid) {
              var visibility = layer.getVisible();
              if (visibility == false) {
                layer.setVisible(true);
              }
              if (visibility == true) {
                layer.setVisible(false);
              }
            }

        });
    });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM