Как обновить обзорный контроль в OL4? - PullRequest
0 голосов
/ 24 апреля 2018

Я новичок в OpenLayers.Я работаю над картой со слоями WMS и пользовательским обзором.Я пытаюсь изменить слой, используемый в обзоре, на основе выбора пользователя.Исходный слой, установленный при создании элемента управления, отображается правильно.Я пытался использовать render () и change (), но, несмотря на тот факт, что новый слой установлен в параметре 'layer', в обзоре ничего не отображается.Вот мой код:

/*add wms layers to map */
for (var i = 0; i < couchesToutes.length; i++) {
    var WMSlayer = new ol.layer.Image({
        name: couchesToutes[i].Name,
        extent: maxextent,
        isBaseLayer: couchesToutes[i].IsBaselayer,
        isVisible: couchesToutes[i].Visible,
        source: new ol.source.ImageWMS({
            url: url,
            params: { 'LAYERS': couchesToutes[i].Name },
            ratio: 1,
            serverType: 'mapserver'
        }),
        minResolution: minRes,
        maxResolution: couchesToutes[i].IsBaselayer === 1 ? 1000 : maxRes
    });
    if (WMSlayer.get('isBaseLayer') === 1 && currentBaseLayer == null)
        currentBaseLayer = WMSlayer;
    arrayLayerTous[i] = WMSlayer;
    map.addLayer(WMSlayer);
}


/*Overview*/
ctrlOverview = new ol.control.OverviewMap({
    className: 'ol-overviewmap ol-custom-overviewmap',
    collapsible: false,
    target: 'overview',
    view: viewOverview,
    maxResolution: maxRes,
    layers: [currentBaseLayer]
});

/* redraw map */
refreshOLMap = function () {
    arrayLayerTous.forEach(function (el) {
        el.setVisible(el.get('isVisible') == 1 ? true : false);
    })
    map.renderSync();
}

/* change the overview layer */
setFondDePlan = function (layername) {
    arrayLayerTous.forEach(function (el) {
        if (el.get('isBaseLayer') == 1) {
            if (el.get('name') === layername) {
                el.set('isVisible', 1); //show the layer
                currentBaseLayer = el;
                ctrlOverview.set('layers', [currentBaseLayer]); //new layer is set
            }
            else {
                el.set('isVisible', 0); //hide the other layers
            }
        }
    })
    refreshOLMap();
    ctrlOverview.render(); //doesn't work, how to update the overview ?
}

Спасибо за ваше время.

...