OpenLayers在控件上更改图层

时间:2012-12-21 15:49:35

标签: 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();

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

任何有助于此的方法都将非常感激。

1 个答案:

答案 0 :(得分:0)

我还研究了在多个图层上获取modifyControl的方法。这并不容易。 在创建ModifyControl时,将设置图层。它还为该图层创建了一个dragControl。如果使用modifyFeature.deactivate(),则仅禁用控件,而不删除。我认为这会导致您遇到的干扰。

您还应该使用modifyFeature.destroy()

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