我将有一个openlayers矢量图层,其中散布着遍布整个地图的特征。我希望能够点击某个功能并显示一条消息。OpenLayers矢量图层特征处理程序
我不确定是否有方法为每个功能添加侦听器/处理程序。
任何想法?
我将有一个openlayers矢量图层,其中散布着遍布整个地图的特征。我希望能够点击某个功能并显示一条消息。OpenLayers矢量图层特征处理程序
我不确定是否有方法为每个功能添加侦听器/处理程序。
任何想法?
添加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
}
});
如果有很多矢量图层是有必要写“LAYER_NAME。 events.on ...“为每个图层?是否可以制作图层列表并将“.events.on”分配给所有图层?
您需要结合使用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;
}
这里是您将使用该控件的引用:
这个例子只是1层,但我注意到,一旦你开始使用2个矢量图层,并且需要添加/激活第二个控件来执行悬停时的操作,One将无法工作。 (并且您需要停用可以使其他工作起作用的那个)。奇怪的。 – 2012-10-10 12:39:04
我没有自己尝试,但是当你创建SelectControl的时候,你可以发送一个矢量图层的数组,而不是像在例子中那样在上面。那么你应该能够在selectControl.onSelect(){}中捕获select事件;功能。 – igorti 2011-12-22 18:43:19