openlayers2地图控件扩展:要素删除DeleteFeature

时间:2023-03-10 01:35:38
openlayers2地图控件扩展:要素删除DeleteFeature

实现要素删除控件,扩展OpenLayers.Control类,实现效果:选择DeleteFeature工具后,选择要素,按delete键删除要素(这里的删除只是将feature设置成delete状态,需提交到远程服务器才能删除数据源中的要素),具体代码如下:

 OpenLayers.Control.DeleteFeature = OpenLayers.Class(OpenLayers.Control.SelectFeature, {
deleteCodes: null, /*
* layers--Array[]
* options--Object{}
* */
initialize: function(layers, options) {
var me = this;
me.deleteCodes = [46, 68];
OpenLayers.Control.SelectFeature.prototype.initialize.apply(this, arguments);
me.keyboard = new OpenLayers.Handler.Keyboard(this,{
keydown: me.handleKeypress,
scope: me
});
},
handleKeypress: function(evt){
var code = evt.keyCode;
// check for delete key
if(OpenLayers.Util.indexOf(this.deleteCodes, code) != -1){
var feature = this.handlers.feature.feature;
if(!feature)
return; // if feature doesn't have a fid, destroy it
if(feature.fid == undefined) {
this.layers[0].destroyFeatures([feature]);
} else {
feature.state = OpenLayers.State.DELETE;
this.layers[0].events.triggerEvent("afterfeaturemodified",
{feature: feature});
this.layers[0].drawFeature(feature);
}
}
},
setMap: function(map) {
this.keyboard.setMap(map);
OpenLayers.Control.SelectFeature.prototype.setMap.apply(this, arguments);
},
activate: function() {
return (this.keyboard.activate() &&
OpenLayers.Control.SelectFeature.prototype.activate.apply(this, arguments));
},
deactivate: function() {
this.keyboard.deactivate();
OpenLayers.Control.SelectFeature.prototype.deactivate.apply(this, arguments);
},
CLASS_NAME: "OpenLayers.Control.DeleteFeature"
});

效果

openlayers2地图控件扩展:要素删除DeleteFeature