自动刷新WMS图层

时间:2015-12-18 10:37:33

标签: javascript openlayers-3

我试图每隔x分钟从openlayers 3.5自动刷新WMS图层。

我定义了一个这样的图层:

var radar = new ol.layer.Image({
    name: 'radar',
    visible: true,
    source: new ol.source.ImageWMS({
        url: 'geoserver url',
        params: {
            'LAYERS': 'xxxx',
            'SRS': 'EPSG:4326',
            'FORMAT': 'image/png',
            'SERVICE': 'WMS',
            'VERSION': '1.1.0',
            'REQUEST': 'GetMap',               
            'WIDTH': '512',
            'HEIGHT': '376'
        }
    })
});

初始化地图时,图层显示正确。然后我使用“后来的js库”每隔x分钟刷新一层,这里我有疑问。我有一个刷新图层的功能:

    function refreshRadarLayer() {
map.removeLayer(radar);

radar = new ol.layer.Image({
    name: 'radar',
    source: new ol.source.ImageWMS({
        url: 'geoserver url',
        params: {
            'LAYERS': 'xxxxx',
            'SRS': 'EPSG:4326',
            'FORMAT': 'image/png',
            'SERVICE': 'WMS',
            'VERSION': '1.1.0',
            'REQUEST': 'GetMap',           
            'WIDTH': '512',
            'HEIGHT': '376'
        }
    })
});

map.addLayer(radar);

}

这个函数是正确的但是,我可以使用setSource这样做吗?

function refreshRadarLayer() {
    radar.setSource(new ol.source.ImageWMS({
        url: 'geoserver url',
        params: {
            'LAYERS': 'xxxx',
            'SRS': 'EPSG:4326',
            'FORMAT': 'image/png',
            'SERVICE': 'WMS',
            'VERSION': '1.1.0',
            'REQUEST': 'GetMap',      
            'WIDTH': '512',
            'HEIGHT': '376'
        }
    }));
}

2 个答案:

答案 0 :(得分:0)

尝试更新源参数,而不是源本身。像这样

radar.getSource().updateParams({
'LAYERS': 'xxxx',
'SRS': 'EPSG:4326',
'FORMAT': 'image/png',
'SERVICE': 'WMS',
'VERSION': '1.1.0',
'REQUEST': 'GetMap',      
'WIDTH': '512',
'HEIGHT': '376',
't':new Date().getMilliseconds()
});

答案 1 :(得分:0)

谢谢,

最后我解决了类似你答案的autorefresh:

radar.getSource().updateParams({
            'LAYERS': 'xxxx',
            'TIME': n
    });

其中n是一个返回毫秒的函数。