2009-04-29 8 views
0

Я, кажется, попал в ошибку, или я что-то упустил.OpenLayers .containsPoint после кастрюли

Я написал код, который перечисляет все векторные функции на слое OpenLayers Vector - чтобы проверить, находится ли мышь внутри векторной функции - если это так, то она отображает некоторую информацию, основанную на этой функции.

Мне пришлось написать свои собственные методы, чтобы сделать это, потому что существующие элементы управления OpenLayers (выберите и т. Д.) Останавливаются после нахождения функции под мышью, а также возможность укладки нескольких функций друг над другом.

Моя проблема заключается в том, что метод .containsPoint, похоже, использует коорды до «панорамирования». После увеличения или уменьшения геометрии кажется, что оно находится в правильном месте, и .containsPoint работает правильно, когда я машу мышью над картой.

Нужно ли мне делать что-то после того, как карта была приготовлена, чтобы обновить что-то (геометрии объектов, в)

ответ

2

Я понимаю, что у этого вопроса почти был первый день рождения, и он может быть недействительным больше, но я все равно дам ему ответ.

OpenLayers.Control.DragPan делает вызов на карту, когда вы закончите панорамирование. Если проверить функцию OpenLayers.Map панорамирование, вы увидите этот комментарий внутри:

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

Следующая логика функции отражает этот комментарий.

Так что да, каждый раз, когда вы закончите панорамирование вам нужно сделать что-то вроде:

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

... и все должно волшебно работать для вас.

+0

.. вы сказали, что это почти на вопросы 1-го дня рождения - я это исправить ... Я могу только помнить, что мне пришлось называть другой метод. Я собирался опубликовать ответ, но был «обеспокоен» вопросом и ответом на мои собственные вопросы, в то время .... – Adrian

0

Без кода образца фрагмент кода очень трудно ответить на этот вопрос. OpenLayers может выбирать несколько объектов с помощью мыши. Вы уже пробовали OpenLayers 2.8?