2013-03-18 11 views
0

我有一個OpenLayers地圖,我希望用戶能夠通過拖動鼠標來繪製框(類似於this example here,先選擇「選擇功能(選定0個功能)」選項)並獲得繪製框的邊界。從OpenLayers中的選擇框中獲取框邊

我可以使用像下面這樣的smth來繪製箱子,但是當地圖中沒有任何特徵或沒有選擇特徵時,它將不起作用,那肯定會是這種情況。

new OpenLayers.Control.SelectFeature(this._layers.osm, { 
     multiple: true, 
     box: true, 
     hover: false, 
     toggleKey: 'ctrlKey', 
     multipleKey: 'shiftKey', 
     onBeforeSelect: function() { 
      console.log(arguments); 
     } 
    }) 

是否有一個簡單的方法的OpenLayers做到這一點,或者我應該做繁重的通過跟蹤鼠標拖動和繪圖/刪除相應的多邊形提升自己?

謝謝。

回答

1

嘗試使用SelectFeature控制的"boxselectionend"事件(需要2.12)

但這事件不返回邊界或做出的選擇,僅返回一個層陣列。

另一種選擇是從外部創造Handler.Box,這也是我在某些情況下,這樣做的:

var mySelectFeature = OpenLayers.Control.SelectFeature(...); 
var myHandlerBox = new OpenLayers.Handler.Box(
    mySelectFeature, { 
     done: function(bounds) { 
      OpenLayers.Control.SelectFeature.prototype.selectBox.apply(
           mySelectFeature, arguments); 
      ... your code ... 
     } 
    }, 
    {} 
); 
+0

什麼是其中只包含一個WMS圖層的地圖可能的特徵?我試過你的代碼示例,但「完成」回調函數沒有被調用,因爲沒有選擇任何功能,我想......謝謝。 – 2013-03-19 09:47:58

+0

其實我採取Handler.Box的方法,並遇到[這個例子](http://openlayers.org/dev/examples/custom-control.html)。我創建了一個自定義控件,並在那裏使用Handler.Box,如示例中所示。 +1並且接受指向正確方向的答案。 – 2013-03-19 09:57:07