Создание собственного типа динамического слоя в OL3

В настоящее время я переношу специальный тип динамического слоя, который я создал для OpenLayers, с OL2 на OL3. Слой отображает маркеры (их много, обычно около 1000), которые движутся по заданным траекториям. Траектории загружаются в специальном формате JSON с сервера.

Мой текущий подход к OL2 очень эффективен, сильно оптимизирован и использует библиотеку Raphael (http://raphaeljs.com/). . Общий вид приложения выглядит так:

  • OpenLayers2 загружен, карта создана
  • Создается специальный слой «DynLayer», созданный по образцу собственного VectorLayer OL2. Этот уровень обеспечивает взаимодействие с OL2 (масштабирование, панорамирование, перетаскивание и т. д.) и предоставляет очень сложный асинхронный механизм для перерисовки на карту (то есть перемещения маркеров) на основе текущего взаимодействия (например, частота обновления снижается, если пользователь в настоящее время перемещается по карте, чтобы предотвратить эффект заикания). Во время построения DynLayer создает SVG-слой Raphael и прикрепляет его к DOM. Если карта панорамируется или масштабируется, слой Raphael синхронизируется с DynLayer.
  • Затем на SVG-слое создаются маркеры, и их положение периодически обновляется.

Этот подход работает очень хорошо, и поскольку Raphael поддерживает более старые версии IE, он также работает в IE8 и IE7. Это также позволяет мне создавать анимации на основе встроенного метода анимации Raphaels.

Сейчас я пытаюсь перенести это приложение на OL3, и я не уверен на 100%, какой подход будет лучшим. Возможно ли в OL3 добавлять пользовательские слои после загрузки OL3? Если да, то есть ли документация? Я попытался реализовать свою собственную версию VectorLayer, но OL3 выдал массу ошибок, связанных с объектом goog, предоставляемым Closure API.

В более общем плане: не лучше ли будет воссоздать мой старый подход и нарисовать слой Рафаэля поверх OL3? Этот метод позволил бы мне повторно использовать большую часть моего предыдущего кода. Или мне следует использовать методы, предоставляемые OL3, для рисования непосредственно на холсте HTML5? Если да, то как я могу получить контроль над частотой обновления холста?

Я посмотрел пример на http://ol3js.org/en/vector-api/examples/dynamic-data.html?q=dynamic, но на самом деле это не соответствует моим потребностям. Маркеры анимируются в бесконечном цикле, и мне нужен особый контроль над частотой обновления. В более общем плане, как предотвратить удаление моих маркеров при одном из собственных обновлений холста OL3 (например, если загружаются новые плитки).

Мое общее впечатление от OL3 состоит в том, что добавлять собственные расширения сложнее, чем с OL2, который показался мне более «открытым», чем OL3.

Спасибо за любую помощь!


person patrickbr    schedule 03.06.2014    source источник
comment
Я думаю, что это очень интересный вопрос. К сожалению, у меня еще не было достаточно времени, чтобы по-настоящему вникнуть в OL3, который все еще находится в стадии бета-тестирования. Каковы ваши причины для миграции на данный момент, если все работает, интересно?   -  person John Powell    schedule 04.06.2014


Ответы (1)


Обратите внимание, что OL3 не предназначен для работы с IE7 или другими «старыми» браузерами. Насколько я понимаю, OL3 был создан для производительности и имеет быстрый векторный рендеринг. Он также интегрируется с d3, поэтому, вероятно, его можно интегрировать с другими технологиями.

person Christophe Roussy    schedule 08.09.2014