我目前使用OpenLayers(Vector和WMS)成功顯示多個圖層。 我的應用程序允許用戶修改一些參數,這將:
*修改勢必
*修改地圖中心
*修改WMS圖像
我使用Ajax來避免頁面重載,它工作得很好,但是當一些層需要一段時間才能加載,其他尚未重繪的圖像仍會顯示在背景中(但與我的新上下文無關)。 我想在重新向服務器請求新圖像之前清除WMS圖層(如果可能),但尚未找到任何東西。 我在矢量圖層上通過調用removeAllFeature();在OpenLayers上重繪之前清除WMS圖層
感謝您的幫助!
這裏是我的僞代碼,當用戶點擊該按鈕:
$.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+"))");
}
}
}
);
謝謝,我試過:map.layers [i] .setVisibility(false); \t \t \t \t \t map.layers [i]中。setVisibility(真);然而,這層仍然保留,直到重繪,足夠奇怪。我會嘗試mergeNewParams – 2011-02-11 08:43:10
也許你必須在設置可視性時強制重繪?儘管看起來不太可能... – 2011-02-11 10:48:41