Я новичок в 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 ?
}
Спасибо за ваше время.