Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/405.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 开放层3层可见性-传递变量的问题_Javascript_Jquery_Function_Openlayers 3 - Fatal编程技术网

Javascript 开放层3层可见性-传递变量的问题

Javascript 开放层3层可见性-传递变量的问题,javascript,jquery,function,openlayers-3,Javascript,Jquery,Function,Openlayers 3,我已经建立了一个非常基本的函数,它打开了我地图上的一个图层 这是初始化图层的代码: var featurelayer; featurelayer = new ol.layer.Tile({ name: 'featurelayer', source: new ol.source.TileWMS({url: 'http://myserver/geoserver/wms', serverType: 'geoserver', params:{

我已经建立了一个非常基本的函数,它打开了我地图上的一个图层

这是初始化图层的代码:

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);
    }
  });
});
  • $(“a.layer”)。单击(函数(){ map.getLayers().forEach(函数(层){ if(layer.get('name')==this.id){ featurelayer.setVisible(真); } }); });
    这段代码实际上有效,它在地图上显示图层。我的问题是,我将有多个层,理想情况下,我希望能够将与层同名的列表项的ID传递给setVisible事件

    我似乎不知道该怎么做,因为我的控制台日志总是返回未定义的;我已经尝试创建一个变量,我等于'this.id',但这不起作用-我需要通过我的click函数传递我的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);
                }
            });
        });
    
    编辑:这是你需要的吗


    我已将ID添加到两个li项目中,并且单击事件与类“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);
                  }
                }
    
            });
        });
    

    感谢您的回复,不幸的是,这不起作用:(@Chris注意,在您的情况下,点击绑定到
    ,在@Fbma fiddle中,点击绑定到
  • 。因此,如果您想点击
    ,请将
    类和
    id
    放在上面,比如:
    感谢Fbma更新您的回复-我已经尝试过了,并且在一定程度上有效!T他的问题是,它只会使你点击的图层可见,并隐藏其他图层;我真正想做的是能够切换图层。我认为这种方法适用于只需要显示一个图层的底图,但需要一些调整,这样它就不会干扰其他图层的状态。我刚刚尝试添加了一点我正在使用OL3 API中的getVisible()方法,但我不确定是否需要先创建一个变量,然后在if语句中使用它?…
    if(layer.get('name')==lid){if(layer.getVisible()='false')){layer.setVisible(true);}if(layer.getVisible()='true'){layer.setVisible(false);}}