Скорость рендеринга в QGIS. Часть 2

На прошлой неделе я приводил результаты тестирования скорости отрисовки линейных векторных слоёв в QGIS. Если коротко, то картина следующая:

  • скорость отрисовки зависит от количества объектов в слое, зависимость приближена к экспоненциальной
  • набольшая скорость достигается при использовании максимально простого условного знака (что ожидаемо)
  • дольше всего выполняется отрисовка с использованием сложного условного знака, отрисовка по правилам занимает промежуточную позицию

Одним из способов повысить скорость отрисовки является упрощение (генерализация) объектов. Этот прием довольно часто применяется в web-картографии, когда вместо оригинального слоя в некотором диапазоне масштабов отображается заранее подготовленный упрощенный и менее точный.

Никто не запрещает использовать такой подход и при работе в QGIS. Правда, эффект будет наблюдаться только в заранее настроенных проектах и только с подготовленными слоями. Выходом может быть генерализация слоёв «на лету».

В API QGIS есть метод для упрощения объектов, однако он работае с объектами QgsGeometry и просто так применять его при отрисовке не получится. На помощь пришла маленькая и быстрая JavaScript библиотека simplify.js (привет, Kompza!), предназначенная для упрощения линий с использованием алгоритмов Radial Distance и Douglas-Peucker. На ее основе я и попытался реализовать упрощение линейных объектов «на лету».

Тестовая платформа, наборы данных и обстановка остались теми же. Результаты ниже.

Для сравнения все результаты вместе