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);}}