2

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

削除して新しいコントローラーを追加する方法は機能すると思いますが、問題はコントローラーの複製を取得することです。つまり、一度に複数のレイヤーを変更するため、コントローラーを削除しないと思います最初の場所。

これを支援する方法は大歓迎です。

4

1 に答える 1

0

また、複数のレイヤーでmodifyControlを取得する方法も検討しました。これは簡単ではありません。ModifiedControlを作成すると、レイヤーが設定されます。また、そのレイヤーのdragControlを作成します。modifyFeature.deactivate()を使用する場合、そのコントロールは無効にされるだけで、削除されません。それがあなたが経験している干渉を引き起こしていると思います。

また、modifyFeature.destroy()を使用する必要があります

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