tags:

views:

230

answers:

2

I've seem to have hit a bug or i have overlooked something.

I written some code that enumerates through all the vector features on a OpenLayers Vector layer - to check if the mouse is inside a vector feature - if so then it displays some info based on the feature.

I had to write my own methods to do this because the existing OpenLayers Controls( select etc) stop after finding a feature under the mouse, and i the possibility of several features being stacked on top of one another.

My problem is that the .containsPoint method seems to be using coords from before a 'pan'. After zooming in or out the geometry seems to be in the right place and .containsPoint is works correctly when I wave the mouse over the map.

Do I need to do something after the map has been panned to update something( feature's geometry)

A: 

Without a sample code snippet it is very hard to answer this. OpenLayers is able to select multiple objects on a mouse click. Have you tried OpenLayers 2.8 already?

milovanderlinden
A: 

I realize this question has almost had it's first birthday, and it may not be valid anymore, but I'll give a shot at answering it anyway.

OpenLayers.Control.DragPan makes a call to the map when you are done panning. If you check the OpenLayers.Map pan function, you will see this comment inside:

// only call setCenter if not dragging or there has been a change

The following logic in the function reflects this comment.

So yes, every time you are done panning you need to do something like:

dragpan.handler.up = function(evt)
{
    dx = dragpan.handler.last.x - evt.x;
    dy = dragpan.handler.last.y - evt.y;
    var centerPx = map.getViewPortPxFromLonLat(map.getCenter());
    var newCenterPx = centerPx.add(dx, dy);
    var newCenterLonLat = map.getLonLatFromViewPortPx(newCenterPx);
    map.setCenter(map.getCenter() + dragpan.handler.xy);
}

...and things should magically work for you.

Conley Owens
..as you said, it is nearly at the questions 1st birthday - I did fix this... I can only remember that I had to call a different method. I was going to post the answer - but was 'worried' about asking and answering my own questions, at the time....
Adrian