Домашний рендеринг карт из данных OSM на Lubuntu 14.04 ?

Ответить

Автор темы
burdasov
Сообщения: 34
Зарегистрирован: 03 авг 2014, 18:01

Домашний рендеринг карт из данных OSM на Lubuntu 14.04 ?

#1

Сообщение burdasov » 07 ноя 2014, 08:02

Здравствуйте, уважаемые Гуру и Специалисты!
Полное название моей темы:
Как установить и настроить генератор тайлов Mapnik2 на Lubuntu 14.04 + Python 2.7.6 + PostgreSQL 9.3.5 + PostGIS 2.1 c целью домашнего рендеринга карт из данных OSM.

Мой опыт работы под Linus не большой (всего 4 месяца,опыт работы с серверами баз данных и базами данных практически отсутствует. В течении месяца пытался на своей системе настроить генератор тайлов Mapnik2, необходимый мне для одной программы навигации, но ничего, к сожалению,не получилось. Отчаялся уже совсем… Много гуглил, потом много чего пробовал делать из найденного,периодически переустанавливал свою систему (Lubuntu 14.04),но в итоге проблему не решил. Наиболее полную и понятную для своего уровня инструкцию нашёл такую:
ИНСТРУКЦИЯПоказать
Установка генератора тайлов Mapnik2 на Kubuntu 13.10 + Python 2.7.5+ c целью домашнего рендеринга карт из данных OSM

При написании использовался как источник:

http://habrahabr.ru/post/144675/

Я постарался дополнить его информацией которая в нём отсутствует.

А также http://vladimir-stupin.blogspot.com/201 ... ik_29.html

без которого бы у меня не получилось распутать все хитросплетения описанные в первом источнике.

Ставим базу данных PostgreSQL:

$ sudo apt-get install postgresql

Ставим утилиту поиска файлов, которая нам далее очень пригодится:

$ sudo apt-get install findutils locate

Далее нам необходимо узнать расположение файла pg_hba.conf

$ sudo updatedb

$ locate pg_hba.conf

В моём случае он расположен в /etc/postgresql/9.1/main/pg_hba.conf

Открываем его в любом текстовом редакторе для правки:

$ sudo nano /etc/postgresql/9.1/main/pg_hba.conf

Находим строку

local all all peer

и заменяем peer на password (для домашнего пользования не обязателен высокий уровень безопасности), сохраняем файл и выходим из редактора

Далее перезапускаем PostgreSQL:

$ sudo /etc/init.d/postgresql restart

Заменяем пароль пользователя postgres, созданного автоматически при установке PostgreSQL на свой собственный (чтобы не забыть :) ):

$ sudo passwd postgres

<мой_пароль>

<повторяем мой_пароль>

Заходим в консоль управления PostgreSQL и создаём пользователя и базу с доступом через обычный пароль :

$ su postgres

<мой_пароль>

$ psql

postgres=# CREATE ROLE osm WITH SUPERUSER PASSWORD 'мой_пароль' LOGIN;

CREATE ROLE

Обратите внимание на одинарные кавычки в которые взят пароль в них может скрываться ошибка при копировании со строки браузера. Наберите их вручную. Продолжаем:

postgres=# CREATE DATABASE osm;

CREATE DATABASE
postgres=# \q
Проверяем работоспособность нового пользователя:
$ psql -U osm -d osm -W

<мой_пароль>

osm=#

Если удачно вошли в консоль psql под пользователем osm, то всё в порядке. Снова выходим из консоли и из режима пользователя postgres:

osm=# \q

$ exit

Установка osm2pgsql:

Это пункт, выполняемый в одну команду:

$ sudo apt-get install osm2pgsql

Установка PostGIS:

Собственно она уже установилась когда мы ставили osm2pgsql. Но та версия нам категорически не подходит. Как не хотелось этого делать, но эту программу пришлось компилировать из исходных кодов. Иначе нельзя. Потому как в родных репозиториях недостаёт нужных нам файлов. Скачиваем программу с помощью wget и распаковываем с помощью tar:
$ wget http://postgis.refractions.net/download ... 5.4.tar.gz
$ tar xvfz ./postgis-1.5.4.tar.gz
Переходим в папку с исходниками и конфигурируем их. Это самое нудное занятие, поскольку приходится ставить отсутствующие в системе пакеты в ответ на возникающие при конфигурировании ошибки. Это пакеты «development» с приставкой -dev. На моей системе это были пакеты: libpq-dev, postgresql-server-dev-9.1, libxml2-dev, libgeos-dev, libproj-dev.
$ cd postgis-1.5.4
$ sudo ./configure
Если добились PostGIS is now configured for... то:
$ sudo make install

Устанавливаем специальный язык в базу osm:

$ createlang plpgsql osm -U osm -W

С помощью locate находим два файла postgis.sql и 900913.sql

У меня они находятся по адресу:

/usr/share/postgresql/9.1/contrib/postgis-1.5/postgis.sql

и

/usr/share/osm2pgsql/900913.sql

Не забываем перед поиском выполнить $ sudo updatedb Далее выполняем от пользователя postgres:

$ su postgres

<мой_пароль>
$ psql -U osm -d osm -W -f /usr/share/postgresql/9.1/contrib/postgis-1.5/postgis.sql
$ psql -U osm -d osm -W -f /usr/share/osm2pgsql/900913.sql
Если выдаёт ошибки типа ERROR: type «geometry» does not exist выполните $ sudo ldconfig и снова повторите выполнение файлов.
Выходим из под пользователя postgres:
$ exit
$ cd ..
Установка Mapnik2:
Всё просто:
$ sudo apt-get install python-mapnik2
Проверяем установку заходя в консоль python:
$ python
>>> import mapnik2
При этом не должно быть никаких сообщений об ошибках
Ctrl+D для выхода из консоли.
Установка дополнительных скриптов для Mapnik2:
$ sudo apt-get install subversion
$ svn co "http://svn.openstreetmap.org/applicatio ... ing/mapnik"
$ 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:
$ 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.
Ctrl+D для выхода из консоли.
Выполним редактирование конфигурации сервера PostgreSQL:
$ sudo kate /etc/postgresql/9.1/main/postgresql.conf
В конфиге изменим строки:
checkpoint_segments = 20
autovacuum = off
Перезапустим сервер:
$ sudo /etc/init.d/postgresql restart
Теперь надо загрузить в базу первый файл данных OSM. Попутно автоматически в базе создадутся таблицы Planet_osm* необходимые нам далее. Копируем файл данных OSM в папку mapnik и выполняем:
$ osm2pgsql -U osm -d osm -W data.osm.bz2

<мой_пароль>

Если при загрузке файла данных появляется 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
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 Они должны быть взяты отсюда поочерёдно против часовой стрелки начиная с левой и подставлены далее как <left>,<bottom>, <right>,<top>

Находим в generate_tiles.py строки:

bbox = (-180.0,-90.0, 180.0,90.0)

render_tiles(bbox, mapfile, tile_dir, 0, 5, "World")

И сразу перед ними добавляем следующее :

bbox = (<left>,<bottom>, <right>,<top>)

render_tiles(bbox, mapfile, tile_dir, 16, 16, "My_First_Tiles")

exit()

Причём первое число 16 — это минимальный зум, второе число 16 — это максимальный зум. То есть можно устанавливать с какого по какой зум рендерить карту.
Запускаем скрипт командой
$ python ./generate_tiles.py
Для работы с polytiles.py надо установить пакет python-psycopg2, python-shapely, python-gdal
Файл generate_tiles_multiprocess.py позволяет повысить производительность рендеринга, если процессор компьютера не загружен на максимум при работе скрипта generate_tiles.py
Полная ссылка на эту инструкцию: http://mister-gemix.narod.ru/index/mapnik2/-9-0-9
В репозитариях Lubuntu 14.04 и (Ubuntu 14.04)нет предлагаемых пакетов PostgreSQL 9.1 и PostGIS 1.5.4. Попытки установки этих старых версий порождают массу проблем и конфликтов в системе, да и генерация тайлов в итоге не получается. Возможно в конфигурации системы автора инструкции всё и удаётся, но на моей Lubuntu 14.04 – не работает.
Подскажите мне неопытному, уважаемые, если это возможно и не слишком сложно для Вас – как мне настроить рендеринг карт из данных OSM с использованием имеющихся в Lubuntu 14.04 -
PostgreSQL 9.3.5 + PostGIS 2.1 + Python 2.7.6. Ах если бы Вам удалось модифицировать эту инструкцию или создать новую, лучшую… - наверное, это будет многим очень актуально и полезно.
Буду бесконечно Вам благодарен.
С уважением,burdasov.

Ответить