【问题标题】:GeoExt.LayerOpacitySlider not working on WMS layers, any idea why?GeoExt.LayerOpacitySlider 不适用于 WMS 图层,知道为什么吗?
【发布时间】:2014-06-23 19:57:38
【问题描述】:

我有一个使用 OpenLayers 和 GeoExt 库的网站。 我的目标是为我的每一层(我有 5 层)设置一个不透明度滑块。现在,它正在使用我的矢量图层,但不是我的 WMS 层。我尝试了基础层(打开街道地图),它工作正常。

这是创建层的代码:

//This part is inside an "if success" in an ajax request.   
map.addLayer(new OpenLayers.Layer.WMS(openlayers_wms_layer_analyses, CMCDataServer, {
layers: analysesWMSLayer[currentStatePeriod],
styles: analysesWMSStyle[currentStatePeriod],
format: "image/png",
transparent: true,
time: currentStateDate.getUTCFullYear() + "-" + ('0' + (currentStateDate.getUTCMonth() + 1)).slice(-2) + "-" + ('0' + currentStateDate.getUTCDate()).slice(-2) + "T" + timeChopArray[currentStateIndex] + ":00:00Z"
     },
{
     opacity: 0.73,
     visibility: true
 }));
Ext.getCmp('analyses_validity_display_extjs').setValue(extjs_gui_state_panel_valid_analyses);
Ext.getCmp('extjs_gui_legend_tab_panels').setActiveTab(0);
} else {
    Ext.getCmp('analyses_validity_display_extjs').setValue(extjs_gui_state_panel_invalid_analyses);
    Ext.Msg.alert(extjs_gui_analyses_missing_warning_title, extjs_gui_analyses_missing_warning);
    Ext.getCmp('analyses_checkbox_extjs').setValue(false);
    }
}
});

//This part is a little lower in my code, it's an "else" after the ajax request on top. 
}else if(map.getLayersByName(openlayers_wms_layer_analyses).length!=0){
    adjustStatePanelAnalysesValidity();
    map.removeLayer(map.getLayersByName(openlayers_wms_layer_analyses)[0]);
}
    adjustStatePanelProducts(checkbox, checked);
}

这是我的滑块代码:

new GeoExt.LayerOpacitySlider({
       width: 100,
       value: 100,
       layer: map.getLayersByName(openlayers_wms_layer_analyses)[0],
       aggressive: true, 
       style: {
            position: 'absolute',
            left: '150px'
       }
 }), 

我对矢量图层的滑块使用了完全相同的代码,并且运行良好。如果我将图层的名称更改为我的基础图层,它也可以正常工作。我不能认为这是因为我没有选择正确的图层,因为我使用了图层创建中使用的名称。如果你检查层被移除的方式,你会发现它使用了和我一样的行,像这样:map.removeLayer(map.getLayersByName(openlayers_wms_layer_analyses)[0]);

你有什么想法可以帮帮我吗?

更新:我在 javascript 控制台中写了map.getLayersByName(openlayers_wms_layer_analyses)[0]。如果我没有选中该框以查看图层,我会得到“未定义”,但如果选中并且我可以看到图层,我会正确看到图层。这意味着我的滑块应该工作..不?

【问题讨论】:

    标签: javascript slider openlayers opacity geoext


    【解决方案1】:

    最后,当“动态”创建图层时,GeoExt.LayerOpacitySlider 似乎根本不起作用。我认为它需要在创建滑块之前创建图层(这对我来说没有任何意义)。我想这是 GeoExt 中的一个错误。

    我的解决方案是构建一个“标准”的 Ext.Slider 来改变不透明度。这工作得很好,这是我使用的代码,如果你有同样的问题:

    new Ext.Slider({
        width: 125,
        value: 73,
        listeners: {
            change: function(analysesSlider, val) {
                 map.getLayersByName(openlayers_wms_layer_analyses)[0].setOpacity(val/100);
             }},
         style: 'position:absolute; left:135px;'
          }),  
    

    【讨论】:

      猜你喜欢
      • 2013-08-13
      • 1970-01-01
      • 1970-01-01
      • 2020-01-20
      • 2015-03-14
      • 1970-01-01
      • 1970-01-01
      • 2023-02-10
      • 1970-01-01
      相关资源
      最近更新 更多