我將有一個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