OpenLayers .Содержит точку после панорамирования
-
03-07-2019 - |
Вопрос
Кажется, я наткнулся на ошибку или что-то упустил из виду.
Я написал некоторый код, который перечисляет все векторные объекты на векторном слое OpenLayers - чтобы проверить, находится ли мышь внутри векторного объекта - если это так, то он отображает некоторую информацию на основе этого объекта.
Мне пришлось написать свои собственные методы для этого, потому что существующие элементы управления OpenLayers (select и т.д.) Останавливаются после нахождения объекта под мышкой, и я допускаю возможность того, что несколько объектов будут наложены друг на друга.
Моя проблема в том, что метод .containsPoint, похоже, использует координаты перед 'pan'.После увеличения или уменьшения масштаба геометрия, кажется, находится в нужном месте, и .containsPoint работает корректно, когда я навожу курсор мыши на карту.
Нужно ли мне что-то делать после панорамирования карты, чтобы что-то обновить (геометрию объекта)
Решение
Я понимаю, что этому вопросу уже почти исполнился первый день рождения, и, возможно, он больше не актуален, но я все равно попробую ответить на него.
OpenLayers.Управление.DragPan вызывает карту, когда вы закончите панорамирование.Если вы проверите OpenLayers.Функция панорамирования карты, вы увидите этот комментарий внутри:
// 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);
}
..и все должно волшебным образом сработать на вас.
Другие советы
Без примера фрагмента кода очень трудно ответить на этот вопрос.OpenLayers может выбирать несколько объектов одним щелчком мыши.Вы уже пробовали OpenLayers 2.8?