1. 程式人生 > >OpenLayers3入門篇-單擊事件

OpenLayers3入門篇-單擊事件

單擊事件的繫結

OpenLayers的官方API中有專門的事件函式(ol.interaction),對於事件的繫結也比較方便,但OL沒有右鍵事件,繫結事件的物件是針對整個地圖物件,對相應的地圖層操作時需要對event物件深加工,需要進一步判斷和提取物件。

第一步:

var selectClick = new ol.interaction.Select({
condition: ol.events.condition.click,
style:changeStyle
});

首先建立一個ol.interaction.Select物件,然後指定相應的引數,condition是事件型別,style是時間發生時相應的物件改變的Style,

可以直接寫在Style屬性後面,也可以直接抽離成一個function,但是需要return ol.Style,如下

第二步:

	var changeStyle = function(feature){
var ftype=feature.get("featuretype");
if(ftype=='line'){
return new ol.style.Style({
stroke:new ol.style.Stroke({
width:5,
color:'#9400D3'
})
});
}
};

注:在ol呼叫這個changeStyle函式的時候,會有一個預設的引數feature傳入,在後期對於

feature的判斷會有很多,因為本身是對整個map做的事件繫結,並不是某一個layer,如果快速準確的判斷featurn的型別,就必須先給featurn繫結相應資料,關於繫結資料和提取資料,會單獨再介紹。

第三步:

	map.addInteraction(selectClick); 
        selectClick.on("select",ClickEvent);

第一個addInteraction是將這個函式新增到map,單擊時就只會有樣式的改變,第二個是對這個函式功能的補充,單獨再繫結一個選中事件,即單機事件發生的同時,也促發這個選中事件呼叫ClickEvent函式並傳入event

物件

程式碼如下:

function ClickEvent(e){
var arr=e.target;//獲取事件物件,即產生這個事件的元素-->ol.interaction.Select
var collection = arr.getFeatures();//獲取這個事件繫結的features-->返回值是一個ol.Collection物件
var features = collection.getArray();//獲取這個集合的第一個元素-->真正的feature
if(features.length>0){
var obj = features[0].getId();//獲取之前繫結的ID,返回是一個json字串
var jsonobj=eval("("+obj+")");//轉成json物件
alert(jsonobj.name);//獲取ID
               業務邏輯...
         }
}