Twitter

Facebook

English

GIS-LAB

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

Статьи

ГИС

Обработка ДДЗ

Предложить тему

Документация

ГИС

Обработка ДЗЗ

Журналы

Законодательство

Проекты

О GIS-Lab

О сайте

Участие

Контакты

Геокруг

Что делать?

Пожары/Геоконкурс

Форум

Блог

IRC

Главная

Вопросы и ответы

Рендеринг карт с помощью Mapnik

Описание начала работы с Mapnik и опыт использования в проекте "Космоснимки"

Обсудить в форуме Комментариев — 0

Введение

Mapnik - открытая библиотека для рендеринга растровых карт из векторных данных. Она была разработана для проекта OpenStreetMap нашим соотечественником Артемом Павленко, и сегодня используется и другими ресурсами, среди которых стоит отметить EveryBlock и российские Космоснимки. Основная заявленная цель Mapnik - получение красивых карт.
Данная статья кратко описывает возможности Mapnik и начало работы с ним.

Общая информация

лицензия: LGPL

платформы: UNIX, Windows

языки: C++, Python

форматы входных данных: ESRI Shapefile, PostGIS, PNG, TIFF

выходные форматы: JPEG, PNG

поддержка кодировок: Unicode и любые другие

поддержка шрифтов: TrueType

поддерживаемые графические элементы:

точка

линия с заливкой, текстурой

полигон с заливкой, текстурой, экструзией (псевдо-3D)

надпись к точке, линии, полигону

щиток (картинка+надпись, например, для обозначения трасс)

векторный указатель (например, стрелка вдоль улицы)

Установка под Windows

Скачайте и установите Python 2.5.

Скачайте и установите PIL для Python 2.5.

Скачайте и разархивируйте win32 binaries с сайта Mapnik в папку по выбору - далее [mapnik].

Отредактируйте файл [mapnik]\site-packages\mapnik\paths.py: в первой строчке вместо указанного пути пропишите mapniklibpath = [mapnik]/lib/mapnik

Добавьте путь к папке [mapnik]\lib к системной переменной PATH.

Добавьте путь к папке [mapnik]\site-packages к системной переменной PYTHONPATH.

Проверьте, все ли сделано правильно. В командной консоли, выполните:

python
from mapnik import *

Если появились сообщения об ошибках, проверьте пути выше и ознакомьтесь с TroubleShooting.

Установка под UNIX

С подробной инструкцией на английском языке можно ознакомиться на сайте Mapnik.

Начало работы

Чтобы использовать Mapnik, необходимо написать скрипт на Python, вызывающий нужные его функции (пример такого скрипта из проекта OpenStreetMap). Стили можно задавать прямо в Python-коде или в отдельном XML-файле (пример).

Опыт работы с Mapnik на сайте Космоснимки

На сайте КосмоснимкиMapnik используется для отрисовки карты России масштаба 500.000, а также детальной карты Москвы.

Наши карты мы, следовательно, делали под Веб: сначала прорабатывалось содержание масштабных уровней, подготавливались данные в векторных слоях, потом этому всему задавались стили, затем с помощью Mapnik выполнялся рендеринг и тайлинг - предварительная подготовка растровых данных - нарезка на фрагменты заданной величины для быстрого показа в Интернет.

Еще одна подготовительная процедура для визуальной оценки полученного результата: до того как запускать карту на тайлинг, для примера отрисовывался какой-либо фрагмент карты. Этот способ заменял собой визуальное редактирование в векторном редакторе.

Далее несколько наблюдений из опыта применения Mapnik для данного проекта, потенциально полезных для тех, кто решит пройти испытания Mapnik самостоятельно.

Самое простое: полилинии с внешней границей (outline) мы отрисовывали двумя линиями разного цвета и толщины - одна поверх другой.

Для того, чтобы разместить пунсон, картинку в точке с подписью, использовался сдвиг текста по оси y. Оператор allow_overlap="true" разрешает картинкам перекрываться - тоже нужно, когда пунсонов много.

Наиболее сложная из задач - размещение на карте надписей. Когда их много, они начинали налезать друг на друга, либо пропадать: когда, скажем, улица попадалась особенно изгибистая, ее название искореживалось поворотами и становилось нечитаемым. Как на этих примерах:

В итоге, выяснилось, что есть оператор "max_char_angle_delta", который позволяет установить ограничение на изгиб надписи и в ином случае она просто не показывается.

С min_distance, который по идее должен задавать расстояние между повторяющимися надписями, нам разобраться до конца не удалось. Судя по всему, этот оператор работает только для исключения "лишних" повторяющихся надписей.

Со шрифтами и форматированием текста у Mapnik по умолчанию все не слишком разнообразно. Opacity, прозрачность, для текста пока не работает. Когда мы начинали работать с картой поддерживалась только кодировка UTF-8, поэтому, таблицы в какой-либо кириллической кодировке приходилось предварительно перекодировать. В последней версии стало возможным задавать кодировку в самой программе - encoding="UTF-8".
Дополнительные шрифты записывались в папку ../mapnik/lib/fonts/ и регистрировались в программе следующим образом:

FontEngine.instance().register_font("c:/mapnik_20080205/lib/mapnik/fonts/PTR76__C.PFB")

К сожалению, возможность задавать padding (отступ от внутренней границы) обнаружить не удалось. Из-за этого возникает проблема, когда надо совместить границы двух карты - надписи обрезаются.

А вот какая карта у нас в итоге получилась:

Mapnik и MapServer

Mapnik конкурирует с UMN MapServer в части отрисовки качественных растровых карт из векторных данных. Следующие два примера показывают разницу между Mapnik и MapServer последних версий:

http://openstreetmap.org/?lat=42.29979&lon=-71.05548&zoom=16&layers=B0FT (Mapnik) http://boston.freemap.in/?lat=894547.08189&lon=236111.07751&zoom=7&layers=B (MapServer)

По отрисовке линий, полигонов и шрифтов возможности двух программ очень близки: обе используют AGG и FreeType с anti-aliasing. Но есть много различий в размещении надписей, и тренированный взгляд найдет достаточно проблем в обоих примерах. В целом Mapnik явно разрабатывался под новомодную стилистику Google Maps, и пока проигрывает по настраиваемости и документации более старорежимному на вид MapServer. Это добавляет разработчикам вариантов при выборе пакета для рендеринга. Christopher Schmidt, создатель OpenLayers, сначала перевел свой проект Boston Free Map с Mapserver на Mapnik, а потом обратно.

В заключение

В целом, можно сказать, что мы не слишком страдали от отсутствия графической оболочки под Mapnik, гораздо больше мучений нам доставил поиск Mapnik'овских возможностей, в отсутствие документации, а так же ряд нереализованных или "реализованных не полностью" возможностей, которые мы тщетно пытались найти, и которых не хватило для более качественного, на наш взгляд, рендеринга.

Тем не менее, Mapnik это свободное ПО, действительно позволяющее добиваться красивой отрисовки карт, лучшей, чем в более функциональных и дорогущих редакторах, типа ArcMap.

А то, чего не хватает в Mapnik, например, с точки зрения юзабилити, разнесения функций по классам и т.д. - можно надеятся, во многом восполнимо созданием пользовательской документации. Начало чему уже положено и для чего написана, в частности, данная статья.

Обсудить в форуме Комментариев — 0

Ссылки по теме

Космоснимки

Официальный сайт Mapnik

Последнее обновление: March 14 2011

Дата создания: 27.07.2008

Автор(ы): Георгий Потапов, Владимир Слепнёв

Поделиться

Наверх

Вход

логин

пароль

Регистрация

Забыли пароль?

Новое на сайте

Генерализованные слои границ субъектов РФ

Классификация растровых данных при помощи DTclassifier для QGIS

Получение значений растра по точечным профилям

GeoKettle. Первые шаги

Простейший способ подсчитать количество пикселей определенного цвета в изображении

Данные по тепловым аномалиям MOD14: получение

Все новости

Рассылка новостей

Новое на форуме

Все темы форума

Обратная связь

используйте эту форму для отправки комментария, вопроса или сообщения об ошибке для этой страницы

(Геокруг)

English

О нас

Статьи

Программы

Документация

Контакты

Участие

Форум (все)

Блог

IRC

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

© GIS-Lab и авторы, 2002-2011. При использовании материалов сайта, ссылка на GIS-Lab и авторов обязательна (подробнее).

анализ рынка недвижимости Сочи ; комплектующие к ПК Луганск, это низкие цены и высокое качество. ; Продажа уличных светодиодных экранов бегущих строк, электронных табло.