openlayers2地圖控件擴展:要素刪除DeleteFeature


實現要素刪除控件,擴展OpenLayers.Control類,實現效果:選擇DeleteFeature工具后,選擇要素,按delete鍵刪除要素(這里的刪除只是將feature設置成delete狀態,需提交到遠程服務器才能刪除數據源中的要素),具體代碼如下:

 

 1 OpenLayers.Control.DeleteFeature = OpenLayers.Class(OpenLayers.Control.SelectFeature, {
 2     deleteCodes: null,
 3     
 4     /*
 5      * layers--Array[]
 6      * options--Object{}
 7      * */
 8     initialize: function(layers, options) {
 9         var me = this;
10         me.deleteCodes = [46, 68];
11         OpenLayers.Control.SelectFeature.prototype.initialize.apply(this, arguments);
12         me.keyboard = new OpenLayers.Handler.Keyboard(this,{
13             keydown: me.handleKeypress,
14             scope: me
15         });
16     },
17     handleKeypress: function(evt){
18         var code = evt.keyCode;
19         // check for delete key
20         if(OpenLayers.Util.indexOf(this.deleteCodes, code) != -1){
21             var feature = this.handlers.feature.feature;
22             if(!feature)
23                 return;
24             
25             // if feature doesn't have a fid, destroy it
26             if(feature.fid == undefined) {
27                 this.layers[0].destroyFeatures([feature]);
28             } else {
29                 feature.state = OpenLayers.State.DELETE;
30                 this.layers[0].events.triggerEvent("afterfeaturemodified", 
31                         {feature: feature});
32                 this.layers[0].drawFeature(feature);
33             }
34         }
35     },
36     setMap: function(map) {
37         this.keyboard.setMap(map);
38         OpenLayers.Control.SelectFeature.prototype.setMap.apply(this, arguments);
39     },
40     activate: function() {
41         return (this.keyboard.activate() &&
42                 OpenLayers.Control.SelectFeature.prototype.activate.apply(this, arguments));
43     },
44     deactivate: function() {
45         this.keyboard.deactivate();
46         OpenLayers.Control.SelectFeature.prototype.deactivate.apply(this, arguments);
47     },
48     CLASS_NAME: "OpenLayers.Control.DeleteFeature"
49 });

 

效果

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM