2011-02-28 87 views
3

我需要知道點擊某個功能的確切點。使用SelectFeature我可以獲得關於哪個功能被點擊的信息,但是沒有關於地圖上某個位置的信息。OpenLayers SelectFeature和XY

下面是創建一個聽者函數的代碼:

select = new OpenLayers.Control.SelectFeature(
      [vectorLayer], 
      { 
       clickout: false, toggle: false, 
       multiple: false, hover: false 
      } 
     ); 

osMap.addControl(select); 

,這裏是我的聽衆的定義:

vectorLayer.events.on({ 
      "featureselected": function(e) { 
       //here I need to get XY 
       //something like the code below 
       //(it doesn't work but clearly explains what my idea is)   
       var lonlat = osMap.getLonLatFromViewPortPx(e.xy); 

      } 
});  

感謝

回答

5

尼克拉斯是正確的,我用類似的東西了彈出窗口:

var popup = new OpenLayers.Popup.Anchored(
    "popup", 
    map.getLonLatFromPixel(evt.xy), 
    null, 
    evt.text, 
    null, 
    false 
); 

您可以使用MousePosition控制,如果evt不可用:

map.getLonLatFromPixel(
    (map.getControlsByClass("OpenLayers.Control.MousePosition‌​")[0]).lastXy 
) 
+0

謝謝。好的。問題是evt.xy不適用於這樣的事件(「featureselected」):-( – 2011-03-01 15:27:47

+1

)您可以使用MousePosition控件,然後使用:map.getLonLatFromPixel((map.getControlsByClass(「OpenLayers.Control.MousePosition」) [0])。lastXy) – 2011-03-01 16:23:05

+0

你看看我的編輯部分的鏈接嗎?它看起來好像xy也可以包含在featureselected中。 – 2011-03-15 11:40:16

2

看地圖對象上getLonLatFromPixel功能,連同e.xy屬性。

編輯: 此外,檢查事件的this setting。它看起來像你可以從所有類型的鼠標事件中提取xy屬性。

1

看看http://trac.osgeo.org/openlayers/ticket/2089, 補丁是使用this.handlers.feature.evt

new OpenLayers.Control.SelectFeature([layer],{ 
    hover:true, 
    eventListeners:{ 
     featurehighlighted:function(e){ 
     console.log(this.handlers.feature.evt.clientX-map.div.offsets[0]); 
     console.log(this.handlers.feature.evt.clientY-map.div.offsets[1]); 
    } 
});