2012-12-21 62 views
2

我想更改圖層OpenLayers.Control.ModifyFeature控件 我試過完全刪除控制器,然後基於新圖層添加另一個控制器。 而且我直接用這樣的循環中變更的ModifyFeature的圖層屬性:OpenLayers更改控制層

for(var i = 0; i <= 10; i++) { 
    if(document.getElementById('verksamhet').selectedIndex === i) { 
     controlList.modifyFeature.layer = window[layerName[i+1]]; 
    } 
} 

它幾乎工程;風格發生了變化,但控制器僅在前一層工作,就像這張圖片一樣。 (綠色是上一層,並且是控制器響應的唯一層,但樣式更改爲正確的圖層樣式)。

(http://i.imgur.com/w3ZbW.png)

拆卸控制器和添加一個新的做這樣的:

controlList.modifyFeature.deactivate(); 
map.removeControl(controlList.modifyFeature); 

for(var i = 0; i <= 10; i++) { 
    if(document.getElementById('verksamhet').selectedIndex === i) { 
     controlList.modifyFeature = new OpenLayers.Control.ModifyFeature(window[layerName[i+1]], {displayClass: 'modButton', clickout: true, toggle: true, title: 'Modify feature'}); 
    } 
} 
map.addControl(controlList.modifyFeature); 
controlList.modifyFeature.activate(); 

我想刪除 - 和 - 添加一個新的控制器的方式工作,但問題是,我得到了控制器的副本,即它一次修改幾個層,因此我相信它不會首先刪除控制器。

任何方式來幫助這將不勝感激。

回答

0

我也研究過在多個圖層上獲取modifyControl的方法。這並不容易。 在創建ModifyControl時設置圖層。它還爲該圖層創建一個dragControl。如果您使用modifyFeature.deactivate(),則該控件僅被禁用,不會被刪除。我認爲這會導致你遇到的干擾。

您還應該使用modifyFeature.destroy()

controlList.modifyFeature.deactivate(); 
controlList.modifyFeature.destroy(); 
map.removeControl(controlList.modifyFeature);