OpenLayers改变控制层



我想改变OpenLayers.Control.ModifyFeature控件的图层我试过完全移除控制器,然后添加另一个基于新图层的控制器。我已经直接改变了ModifyFeature的图层属性,使用了这样的循环:

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();

我认为删除和添加新控制器的方式是有效的,但问题是我得到了控制器的副本,即它一次修改了几个层,因此我相信它首先不会删除控制器。

如果您有任何帮助,我将不胜感激。

我还研究了在多个图层上获得modifyControl的方法。这并不容易。在创建ModifyControl时,设置图层。它还为该图层创建了一个dragControl。如果你使用modifyFeature.deactivate(),该控件只会被禁用,而不会被移除。我认为这是造成你所经历的干扰的原因。

你还应该使用modifyFeature.destroy()

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

相关内容

  • 没有找到相关文章

最新更新