OpenLayers .Содержит точку после панорамирования

StackOverflow https://stackoverflow.com/questions/802218

  •  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?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top