В настоящее время я успешно отображаю несколько слоев с помощью OpenLayers (Vector и WMS). Мое приложение позволяет пользователю изменять некоторые параметры, которые:
* изменяют привязку
* изменяют центр карты
* изменяют изображение WMS
Я использую Ajax, чтобы избежать перезагрузки страницы, однако он работает нормально когда некоторым слоям требуется время для загрузки, другие, которые еще не перерисованы, по-прежнему отображаются в фоновом режиме (но никак не связаны с моим новым контекстом). Я хотел бы очистить слои WMS (если возможно), прежде чем повторно запрашивать у сервера новое изображение, но пока ничего не нашел. Я делаю это на векторном слое, вызывая removeAllFeature ();
Спасибо за любую помощь!
Вот мой псевдокод, когда пользователь нажимает кнопку:
$.getJSON("url/updateMapConfig.php",
{
data: $(this).serialize() ,
ajax: 'true',
cache: 'false'
},
function(j){
if (j.result == 'ok') {
var layersToShow = [];
// Refresh vector layer
for(var i=0;i<map.layers.length;i++) {
if (map.layers[i].isVector) {
map.layers[i].removeAllFeatures();
map.layers[i].refresh({force:true}); // Vector layer
}
}
// Refresh visible layers
for(var i=0;i<map.layers.length;i++) {
if (map.layers[i].visibility && !map.layers[i].isBaseLayer && !map.layers[i].isVector) { // Refresh visible non base
map.layers[i].redraw(true); // Other layer
}
}
// Set new bounds
var bounds = new OpenLayers.Bounds();
bounds.extend(new OpenLayers.LonLat(j.bounds.xmin-100, j.bounds.ymin-100));
bounds.extend(new OpenLayers.LonLat(parseInt(j.bounds.xmax)+100, parseInt(j.bounds.ymax)+100));
map.zoomToExtent(bounds);
// Move to destination point
if (j.poiCenter != "") {
eval("map.setCenter(new OpenLayers.LonLat("+j.poiCenter+"))");
}
}
}
);