Понедельник, 18.08.2025, 18:08
Приветствую Вас Гость | RSS
Главная | Установка mapnik на Kubuntu и Debian. Часть 2. | Регистрация | Вход
Меню сайта
Поиск
Вход на сайт
Календарь
«  Август 2025  »
ПнВтСрЧтПтСбВс
    123
45678910
11121314151617
18192021222324
25262728293031
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Друзья сайта
MisterGemix

<Предыдущее>

Установка 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.geofabrik.de/.Попутно автоматически в базе создадутся таблицы Planet_osm* необходимые нам далее. Копируем файл данных OSM в папку mapnik и выполняем:

$ 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, south, 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

<На заглавную страницу сайта>

Создать бесплатный сайт с uCozCopyright MyCorp © 2025