GIS-LAB

Географические информационные системы и дистанционное зондирование

Рендеринг векторных данных в Mapnik без предоставления прямого доступа к хранилищу

Denis Rykov, 28.12.2012

В Mapnik уже давно существует Python API, что делает возможным вызов функций Mapnik (написанного на C++) из Python. Реализовано это в виде так называемых байндингов — специальных обёрток, позволяющих использовать возможности библиотек, написанных на одном языке программирования в приложениях, написанных с использованием другого (для Mapnik существуют байндинги для таких языков программирования как JavaScript, Ruby, Java). В частности, если в Mapnik реализована поддержка того или иного хранилища (реализован функционал на С++), то мы можем отрендерить данные из него. Но если в Mapnik такая поддержка отсутствует, то и вызвать операцию рендеринга данных из него не получится ни из Python, ни еще откуда-либо. Как поступать в такой ситуации? До 2012 года существовал единственный способ решить эту задачу — использовать объекты класса Feature совместно с MemoryDatasource. То есть в Mapnik реализован класс, позволяющий создавать произвольные векторные объекты и рендерить их. Поэтому запросить объекты из хранилища можно было средствами того языка на котором ведётся работа и передать их в Mapnik для создания объектов класса Feature, рендеринг которых поддерживается. Однако использование Feature в связке с MemoryDatasource – довольно неэффективный подход, но альтернативы которому не было до июля текущего года, пока не появился плагин Python (доступен в Mapnik, начиная с версии 2.1), позволяющий рациональным образом расходовать ресурсы системы и передавать в Mapnik данные из произвольного хранилища. Наличие такой возможности позволяет эффективно использовать Mapnik как компонент рендеринга в составе более сложных систем.

Статья

Оставьте комментарий


(Геокруг)

Если Вы обнаружили на сайте ошибку, выберите фрагмент текста и нажмите Ctrl+Enter