разница в производительности между openlayers, decarta и google maps - PullRequest
8 голосов
/ 04 марта 2011

Недавно мы перевели нашу картографическую систему компании с карты Google, сначала на deCarta, а затем на OpenLayers. Мы обнаружили, что OpenLayers и deCarta заметно медленнее, чем Google Maps, когда на карту добавлено много элементов (несколько тысяч) (штифты с пузырьками при нажатии). У Google есть менеджер маркеров, который, кажется, делает его быстрее, но я не могу понять, как это сокращает использование памяти или что-то еще, чтобы заставить его работать намного лучше. Это сводит меня с ума, потому что с OL и deCarta мы делаем то же самое, что и с Google, а остальные работают очень медленно. У кого-нибудь есть опыт работы с этими системами?

Я знаю, что Google является огромным гигантом картографических технологий и поэтому вложил в систему огромные суммы денег, поэтому неудивительно, что это быстрее. Я просто хочу знать, КАК, если это вообще возможно.

Спасибо!

Ответы [ 5 ]

1 голос
/ 01 июня 2011

Основная причина, по которой Google Карты работают лучше при отображении такого количества маркеров, заключается в том, что они используют HTML5 Canvas для визуализации маркеров вместо узла изображения для каждого маркера. Когда браузеру необходимо перерисовать карту при панорамировании или масштабировании, он должен перерисовать все элементы в контейнере слоя. Меньше элементов, лучше производительность. OpenLayers имеет некоторую поддержку Canvas, но я не знаю ни одного маркерного рендера в Canvas. Вам также придется самостоятельно определять клики по маркерам, поскольку у вас больше нет маркера pr узла, по которому можно щелкнуть.

Там, где я работаю, мы генерируем изображение на стороне сервера и используем карту изображений старой школы, чтобы сделать участки изображения кликабельными. Это решение мы приняли задолго до появления Canvas, поэтому я бы не рекомендовал его, но оно также работает в старых браузерах. Если маркеры довольно статичны, я бы предпочел использовать WMS, как предлагали другие, или реализовать его самостоятельно с помощью Canvas.

Осторожно, спецификация Canvas все еще находится в рабочем состоянии и недоступна в старых браузерах: http://caniuse.com/canvas

1 голос
/ 12 марта 2011

Я так понимаю, вы используете один из классов в OpenLayers.Strategy, например Filter или Cluster, чтобы уменьшить количество отображаемых маркеров?Я не использовал карты Google, но похоже, что помеченный менеджер делает то же самое.В конечном счете, обе библиотеки ограничены одинаковыми ограничениями браузера, когда дело касается рендеринга большого количества объектов dom.

1 голос
/ 04 марта 2011

Любой маркер / геоэлемент, который вы поместили на карту через OL API, должен быть загружен в браузер и затем отрисован в памяти браузера.

Если у вас есть много геометрий, которые вы отображаете на карте, выМожно сделать дополнительный слой изображения только с этими геометриями.Вы можете сделать это, используя WMS, такой как Geoserver.Geoserver очень хорошо работает с OpenLayers и является довольно быстрым WMS.Таким образом, вы можете комбинировать общедоступный фоновый слой, такой как OSM или GoogleMaps, со слоями из вашей собственной WMS.

Этот подход может не работать для интерактивных маркеров, но улучшит скорость, когда вы будете отображать любые нарисованные геометрии, такие как многоугольники и т. Д. Накарта.

Привет, Стив

0 голосов
/ 17 октября 2011

У меня возникла та же проблема с deCarta, браузер работает медленнее с 800-контактными элементами (с щелчком мыши), я спросил об этом Кришну Ванку (который больше не работает в deCarta), но я не получаюРешение, поэтому мы строим новый фильтр по параметру масштабирования и координируем элементы рисования и кэшируемые элементы за пределами экрана, чтобы мы могли получить в памяти около 2000 выводов, конечно, это не лучший способ, но он работает.

Проблема в нашемсистема (GPS WebApp) с геометриями и пинами, которые нарисованы пользователями, поэтому дополнительные слои изображения невозможны.

0 голосов
/ 12 марта 2011

Карты Google и Open Layers - это просто JS-Framework для браузера-клиента. Это не должно иметь большого значения. Я думаю, что это - инфраструктура сервера Карт Google, которая немного более эффективна. Кроме того, Marker Manager - не очень хорошее программное обеспечение (разве это не решение для энтузиастов с открытым исходным кодом?), Хотя это JS и клиентская часть, но я использовал свой собственный кластерный менеджер, используя кривую заполнения пространства, и он работает честно хорошо. Бьюсь об заклад, это лучше, чем Marker Manager, потому что есть и другие кластерные решения в Интернете, и для меня они лучше.

...