OpenLayers перерисовывает только после перемещения мыши - PullRequest
5 голосов
/ 14 февраля 2011

В этом случае я использую Map элемент управления из OpenLayers 2.10. На карте у меня есть базовый слой OpenLayers.Layer.OSM и OpenLayers.Layer.Vector с пользовательскими функциями. Теперь, когда я перемещаю карту с помощью мыши, объекты, которые ранее не были видны, не будут перерисовываться, пока не будет отпущена кнопка мыши. Я заметил ту же проблему во всех OpenLayers примерах. Может ли кто-нибудь предоставить какую-то работу вокруг, чтобы изменить это поведение? Чего я хочу добиться, так это рисовать объекты сразу после того, как они становятся видимыми, или всегда рисовать все объекты (я работаю с небольшим количеством объектов, поэтому производительность управления картой не критична).

Моя текущая идея состоит в том, чтобы обрабатывать некоторые конкретные события на карте (например, движение мыши с помощью щелчка мыши) и принудительно перерисовывать объекты.

Ответы [ 3 ]

6 голосов
/ 29 августа 2013

Обновление

Средство визуализации SVG2 было введено в v2.11, а затем сразу же устарело в v2.12 по соображениям надежности (см. этот запрос на извлечение ). Для OL> = 2.12 установите свойство слоя ratio, чтобы оно отображало все объекты в более широкой области как отношение размера экрана. Компромисс - производительность, и если ваш пользователь «бросает» свою карту в каком-то направлении, он пролетит мимо функций, но в этот момент он, вероятно, ожидает некоторые задержки рендеринга.

new OpenLayers.Layer.Vector("My Layer", {
    ratio: 2
});

Оригинальный ответ

С http://lists.osgeo.org/pipermail/openlayers-dev/2011-March/007345.html:

новый OpenLayers.Renderer.SVG2 рендерер делает то, что вы запрашиваете. Это доступно на стволе (и будет в 2.11). Чтобы использовать его, настройте массив рендереров для вашего OpenLayers.Layer.Vector следующим образом:

new OpenLayers.Layer.Vector("My Layer", {
    renderers: ["SVG2", "VML", "Canvas"]
});

Или установите его на прототип:

OpenLayers.Layer.Vector.renderers = ["SVG2", "VML", "Canvas"];

Обратите внимание, что VML (используется в IE6,7,8) и Canvas (используется на устройствах Android) ведут себя как Renderer.SVG и не рисуют функции при панорамировании.

0 голосов
/ 06 июня 2012

На всякий случай, если кто-нибудь наткнется на этот вопрос (как я). OpenLayers 2.11 решает эту проблему.Я протестировал его в своем веб-приложении, и теперь он мгновенно перерисовывает векторные функции, тогда как при установке более старой версии OL он будет делать то, что написано выше.Что-то, чего я никогда раньше не замечал, ни то, ни другое, настолько приятное, чтобы заметить это!

Вот примечания к выпуску.

http://trac.osgeo.org/openlayers/wiki/Release/2.11/Notes

Этот вид показывает это в действии.Боюсь, лучший пример, который я могу найти: P

http://openlayers.org/dev/examples/rotate-features.html

0 голосов
/ 14 февраля 2011

У меня нет решения, но сделал замечание. Если посмотреть на этот пример на Векторное поведение на веб-сайте примеров OL, если элементы частично видны (т.е. размещены на границе области просмотра), они остаются частично скрытыми при перетаскивании в полный вид. Полностью виден только после отпускания кнопки мыши. Суть в том, что проблема с отображением больше, чем с нагрузкой, если это уже не было очевидно ...

Буду следить за вопросом, любопытным на ответ. : -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...