我有一个OpenLayers矢量图层,其特征散布在地图上。我希望能够单击某个要素并显示消息。
我不确定是否有一种方法可以为每个要素添加监听器/处理程序。
有任何想法吗?
我不确定是否有一种方法可以为每个要素添加监听器/处理程序。
有任何想法吗?
添加SelectFeature控件:
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
}
});
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;
}