2011-12-21 60 views
4

我將有一個openlayers矢量圖層,其中散佈着遍佈整個地圖的特徵。我希望能夠點擊某個功能並顯示一條消息。OpenLayers矢量圖層特徵處理程序

我不確定是否有方法爲每個功能添加偵聽器/處理程序。

任何想法?

回答

7

添加SelectFeture控制:

var selectFeature = new OpenLayers.Control.SelectFeature(vector_layer); 
map.addControl(selectFeature); 
selectFeature.activate(); 

之後,你可以聽來選擇/矢量圖層上取消選擇事件:

vector_layer.events.on({ 
    'featureselected': function(feature) { 
     //display your message here 
    }, 
    'featureunselected': function(feature) { 
     //hide message 
    } 
}); 
0

如果有很多矢量圖層是有必要寫「LAYER_NAME。 events.on ...「爲每個圖層?是否可以製作圖層列表並將「.events.on」分配給所有圖層?

+0

我沒有自己嘗試,但是當你創建SelectControl的時候,你可以發送一個矢量圖層的數組,而不是像在例子中那樣在上面。那麼你應該能夠在selectControl.onSelect(){}中捕獲select事件;功能。 – igorti 2011-12-22 18:43:19

4

您需要結合使用SelectFeature控件和OpenLayers.Popup類之一,例如OpenLayers.Popup.FramedCloud。這裏只是一個例子:

http://openlayers.org/dev/examples/select-feature-openpopup.html

在這個例子中,嘗試使用「繪製多邊形」選項來繪製多邊形(在地圖上雙擊來完成多邊形)。然後使用「點擊選擇多邊形」並單擊該多邊形,然後您會看到一個帶框的雲形彈出窗口。

您可以查看頁面的源代碼,看看它是如何完成的。這裏是代碼的相關部分。你可以,當然,改變message任何你想要的框架雲顯示:

var map = <your OpenLayers.Map object>; 
    var polygonLayer = <your vector layer>; 

    selectControl = new OpenLayers.Control.SelectFeature(polygonLayer, 
      {onSelect: onFeatureSelect, onUnselect: onFeatureUnselect}); 
    map.addControl(selectControl); // not in the example, but do this 

    function onPopupClose(evt) { 
     selectControl.unselect(selectedFeature); 
    } 

    function onFeatureSelect(feature) { 
     var message = "<div style='font-size:.8em'>Feature: " + feature.id +"<br>Area: " + feature.geometry.getArea()+"</div>"; 

     selectedFeature = feature; 
     popup = new OpenLayers.Popup.FramedCloud("chicken", 
      feature.geometry.getBounds().getCenterLonLat(), 
      null, 
      message, 
      null, true, onPopupClose); 
     feature.popup = popup; 
     map.addPopup(popup); 
    } 

    function onFeatureUnselect(feature) { 
     map.removePopup(feature.popup); 
     feature.popup.destroy(); 
     feature.popup = null; 
    } 

這裏是您將使用該控件的引用:

+0

這個例子只是1層,但我注意到,一旦你開始使用2個矢量圖層,並且需要添加/激活第二個控件來執行懸停時的操作,One將無法工作。 (並且您需要停用可以使其他工作起作用的那個)。奇怪的。 – 2012-10-10 12:39:04

相關問題