[英]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.