openlayers中的自定制工具欄,包含畫點、線、面


先是在projectquantan-master這個項目中有一個EditingPanel這個工具條,也挺好的,功能挺全的,但是有一點就是只有畫多邊形的一個按鈕,沒有point和path倆個的,所以就想自己去加一個。

然后就發現統一的drawfeature的樣式(olControlDrawFeatureItemInactive),沒有分為point、path和polygon的,然后就去源代碼中找控制這個樣式點代碼去修改他,但是始終沒有找到,只能作罷。

又去網上搜索找到了openlayers自帶的一個control(new OpenLayers.Control.EditingToolbar(vector_layer),這個上面有四個按鈕,point、path、polygon和pan,還好,正打算用它和之前的editingpanel一起做一個東西呢, 

發現了這個  var controls = [

            new OpenLayers.Control.DrawFeature(layer, OpenLayers.Handler.Polygon, {'displayClass': 'olControlDrawFeaturePolygon'}),

            new OpenLayers.Control.DrawFeature(layer, OpenLayers.Handler.Path, {'displayClass': 'olControlDrawFeaturePath'}),

            new OpenLayers.Control.DrawFeature(layer, OpenLayers.Handler.Point, {'displayClass': 'olControlDrawFeaturePoint'})

        ];就是后面的class可以自己加,

就嘗試着在EditingPanel中加一個同樣的,沒想到就成功了。真是踏破鐵鞋無覓處啊。最后代碼:

 1  1 /**
 2  2  * Provide a custom editing panel for editing a vec layer.
 3  3  * Not meant to be general purpose.
 4  4  */
 5  5 var EditingPanel = OpenLayers.Class(OpenLayers.Control.Panel, {
 6  6 
 7  7     initialize: function(layer) { 8 8 9 9 OpenLayers.Control.Panel.prototype.initialize.apply(this, [{}]); 10 10 11 11 var navigate = new OpenLayers.Control.Navigation({ 12 12 title: "Pan Map" 13 13 }); 14 14 15 15 16 16 var drawFeaturePoint = new OpenLayers.Control.DrawFeature( 17 17 layer, OpenLayers.Handler.Point, { 18 18 title: "畫點", 19 19 handlerOptions: {multi: true}, 20 20  displayClass: 'olControlDrawFeaturePoint' 21 21 } 22 22 ); 23 23 24 24 var drawFeaturePath= new OpenLayers.Control.DrawFeature( 25 25 layer, OpenLayers.Handler.Path, { 26 26 title: "畫線", 27 27 handlerOptions: {multi: true}, 28 28  displayClass: 'olControlDrawFeaturePath' 29 29 } 30 30 ); 31 31 var drawFeaturePolygon = new OpenLayers.Control.DrawFeature( 32 32 layer, OpenLayers.Handler.Polygon, { 33 33 title: "畫多邊形", 34 34 handlerOptions: {multi: true}, 35 35  displayClass: 'olControlDrawFeaturePolygon' 36 36 } 37 37 ); 38 38 39 39 var edit = new OpenLayers.Control.ModifyFeature(layer, { 40 40 title: "修改要素" 41 41 }); 42 42 43 43 var del = new DeleteFeature(layer, {title: "刪除要素"}); 44 44 45 45 var save = new OpenLayers.Control.Button({ 46 46 title: "保存更改", 47 47 trigger: function() { 48 48 if(edit.feature) { 49 49 edit.selectControl.unselectAll(); 50 50 } 51 51 // fails if no save strategy 52 52 var strat = OpenLayers.Array.filter( 53 53 layer.strategies, 54 54 function(s) { 55 55 return s instanceof OpenLayers.Strategy.Save; 56 56 } 57 57 )[0]; 58 58 strat.save(); 59 59 }, 60 60 displayClass: "olControlSaveFeatures" 61 61 }); 62 62 63 63 this.defaultControl = navigate; 64 64 //this.addControls([save, del, edit,drawFeaturePoint,drawFeaturePath,drawFeaturePolygon, navigate]); 65 65 this.addControls([navigate,drawFeaturePoint,drawFeaturePath,drawFeaturePolygon, edit, del,save]); 66 66 67 67 }, 68 68 69 69 CLASS_NAME: "EditingPanel" 70 70 });

 

 

上面一個簡略的問題解決的流程,只要有耐心問題自會得到解決的。千萬不要自己放棄,打心底里相信問題能夠得到解決。

要相信只要去堅持,問題總會解決,當然堅持不是盲目的堅持,不斷的尋找解決問題的方法,問題總能在不經意間得到完美的解決。只是有時候過程有點慢吧,不過剛開始沒經驗嘛,慢一點多積累經驗都一樣,后來會越來越快的,只能說你對事物的認知在慢慢的加深,問題就會慢慢得到來解決。

 


免責聲明!

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



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