OpenLayers SelectFeature и XY - PullRequest
       11

OpenLayers SelectFeature и XY

3 голосов
/ 28 февраля 2011

Мне нужно знать точную точку, которая была нажата на объекте. Используя 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 ]

5 голосов
/ 01 марта 2011

Никлас прав, я использую что-то подобное для всплывающих окон:

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
 ) 
2 голосов
/ 01 марта 2011

Посмотрите на функцию getLonLatFromPixel на объекте Map вместе со свойством e.xy.

EDIT: Также проверьте этот параметр на событиях. Похоже, вы можете извлечь свойство xy из всех типов событий мыши.

1 голос
/ 11 октября 2011

посмотрите на 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]);
    }
});
...