Установка
Mapnik2:
Всё
просто
:
$ sudo apt-get install python-mapnik2
Проверяем установку заходя в консоль python:
$ python
>>> import mapnik2
При этом не должно быть никаких сообщений об ошибках.
Если появляется предупреждение:
/usr/lib/python2.7/dist-packages/mapnik2/__init__.py:27: DeprecationWarning: mapnik2 module has been deprecated,
please use 'import mapnik'
warnings.warn(msg, DeprecationWarning)
тогда используйте вместо import mapnik2 просто import mapnik.
Ctrl+D для выхода из консоли.
Установка дополнительных скриптов для Mapnik2:
$ sudo apt-get install subversion
$ svn co "http://svn.openstreetmap.org/applications/rendering/mapnik"
Или можно скачать тоже самое с другого адреса:
$ svn co "https://github.com/openstreetmap/mapnik-stylesheets.git"
Далее:
$ cd mapnik
$ bash ./get-coastlines.sh
И ждём пока скрипт закачает почти 500 Мб данных с довольно низкой скоростью.
Дополнительные заморочки:
Устанавливаем шрифт ttf-unifont:
$ sudo apt-get install ttf-unifont
Далее необходимо узнать где mapnik2 держит свои шрифты:
$ python -c "import mapnik2;print mapnik2.fontscollectionpath"
У
меня
это
папка
/usr/share/fonts/truetype/ttf-dejavu
Ищем с помощью locate установленный перед этим шрифт unifont.ttf:
$ sudo updatedb
$ locate unifont.ttf
У
меня
результат
поиска
был
/usr/share/fonts/truetype/unifont/unifont.ttf
Может так случится что каталог со шрифтами mapnik2 будет являться одним из верхних каталогов в иерархии папок для шрифта unifont.ttf, тогда в следующем шаге копирования шрифта нет смысла.
Копируем этот файл в папку к остальным шрифтам mapnik2:
$ sudo cp /usr/share/fonts/truetype/unifont/unifont.ttf /usr/share/fonts/truetype/ttf-dejavu
Проверяем
наличие
нужного
шрифта
:
$ python
>>> from mapnik2 import *
>>> for face in FontEngine.face_names(): print face
...[Enter]
Должен появится список шрифтов DejaVu* и среди них скопированный нами шрифт unifont Medium (либо Unifont Medium на это следует обратить внимание далее при генерации XML файла стилей).
Ctrl+D для выхода из консоли.
Выполним редактирование конфигурации сервера PostgreSQL (можно этого и не делать):
$ sudo kate /etc/postgresql/9.1/main/postgresql.conf
В конфиге изменим строки:
checkpoint_segments = 20
autovacuum = off
Перезапустим сервер:
$ sudo /etc/init.d/postgresql restart
Теперь надо загрузить в базу первый файл данных OSM. Скачать данные OSM можно на сайте http://download.
$ osm2pgsql -U osm -d osm -W data.osm.bz2
<мой
_
пароль>
Если
появляется
ошибка
Error: Connection to database failed: could not connect to server: No such file or directory Is the server running locally and accepting connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432 ,
то:
$ sudo nano /etc/postgresql/9.1/main/postgresql.conf
В открывшемся файле настроек сервера изменяем номер порта на port = 5432 в соответствии с номером порта в конце ошибки. Перезапускаем сервер.
Если при загрузке файла данных появляется WARNING: то необходимо увеличить кэш программы с помощью параметра -С 3076 где число — это объём кэша в мегабайтах. Для linux 32-bit этот объём не может быть больше 3 Гб:
$ osm2pgsql -C 3076 -U osm -d osm -W data.osm.bz2
При загрузке файлов данных большого объёма программа может завершиться с ошибкой. Пробуем запустить её с параметром --slim, но это сильно замедлит скорость загрузки файла:
$ osm2pgsql --slim -U osm -d osm -W data.osm.bz2
Имейте в виду что описанные команды перезатирают содержимое базы данных. Для добавления нескольких файлов в базу перечисляйте их имена последовательно через пробел:
$ osm2pgsql -C 3076 -U osm -d osm -W data1.osm.bz2 data2.osm.bz2
либо при добавлении файлов к уже существующим данным в базе использовать параметр --append:
$ osm2pgsql -С 3076 -U osm -d osm -W data1.osm.bz2
$ osm2pgsql --append -С 3076 -U osm -d osm -W data2.osm.bz2
Теперь необходимо сгенерировать свой собственный XML файл стилей:
$ python generate_xml.py osm.xml my_osm.xml --dbname osm --user osm --password <мой
_
пароль> --accept-none
Если возникает ошибка связанная с отсутствующим шрифтом unifont Medium, а шрифт присутствует в системе, возможно различие заключается в заглавной букве U в название шрифта. Изменить название шрифта в файле inc/font-settings.xml.inc.template
Mapnik готов для генерации тайлов
Генерация тайлов:
Создаём в папке mapnik папку Tiles
Открываем в редакторе скрипт mapnik/generate_tiles.py
Находим строку с mapfile = home + "/svn.openstreetmap.org/applications/rendering/mapnik/osm-local.xml" и изменяем переменную mapfile = home + "/mapnik/my_osm.xml"
Находим
строку
с
tile_dir = home + "/osm/tiles/"
и
заменяем
её
на tile_dir = home + "/mapnik/Tiles/"
Далее устанавливаем границы рендеринга. То есть необходимо указать скрипту какой участок земной поверхности необходимо изобразить на карте. Их легко «стянуть» со страницы http://www.openstreetmap.org/export. Они должны быть взяты отсюда поочерёдно против часовой стрелки начиная с левой и подставлены далее в скрипт как west, south, east, north. По сути это географические координаты. Если присмотреться к ним, можно догадаться что к чему. Находим нужный участок поверхности на карте (увеличиваем или уменьшаем масштаб если надо) и копируем границы этого участка.
Находим в generate_tiles.py строки:
bbox = (-180.0,-90.0, 180.0,90.0)
render_tiles(bbox, mapfile, tile_dir, 0, 5, "World")
И сразу перед ними добавляем следующее (вместо west, south, east, north подставляем числа через запятую как указано выше с сайта openstreetmap
):
bbox = (west, so
uth, east, north
)
render_tiles(bbox, mapfile, tile_dir, 15, 16, "My_First_Tiles")
exit()Причём первое число 15 — это минимальный зум, второе число 16 — это максимальный зум. То есть можно устанавливать с какого по какой зум рендерить карту.
Запускаем скрипт командой
$ python ./generate_tiles.py
Файл generate_tiles_multiprocess.py позволяет повысить производительность рендеринга, если процессор компьютера не загружен на максимум при работе скрипта generate_tiles.py
Для работы с polytiles.py надо установить пакет python-psycopg2, python-shapely, python-gdal