OpenLayers SelectFeature和XY

时间:2011-02-28 12:51:05

标签: javascript events maps openlayers

我需要知道点击某个功能的确切点。使用SelectFeature我可以获得有关点击了哪个功能的信息,但没有关于地图上某个位置的信息。

以下是创建列表器功能的代码:

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);

            }
});    

由于

3 个答案:

答案 0 :(得分:5)

Niklas是对的,我使用类似弹出窗口的东西:

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

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

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

答案 1 :(得分:2)

查看Map对象上的getLonLatFromPixel函数以及e.xy属性。

编辑: 另外,请检查有关事件的this setting。看起来你可以从所有类型的鼠标事件中提取xy属性。

答案 2 :(得分: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]);
    }
});