2011-12-21 55 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

相关问题