2

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

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

我认为 remove-and-add-a-new-controller-way 有效,但问题是我得到了控制器的副本,即它一次修改了几个层,因此我相信它不会删除控制器中的控制器第一名。

任何帮助解决此问题的方法将不胜感激。

4

1 回答 1

0

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

您还应该使用 modifyFeature.destroy()

controlList.modifyFeature.deactivate();
controlList.modifyFeature.destroy();
map.removeControl(controlList.modifyFeature);
于 2012-12-26T15:30:18.157 回答