Введение
Эта заметка посвящена настройке базы данных для генератора тайлов Mapnik. Генератор тайлов - это программа, которая на основе векторного описания карты и файла описания стилей формирует квадратные растровые картинки с изображением карты.
Генератор тайлов можно использовать в сочетании с различными JavaScript-библиотеками, позволяющими прямо в веб-браузере просматривать карту. Проект OpenStreetMap, в котором используется генератор тайлов Mapnik, пользуется JavaScript-бибилиотекой OpenLayers. Забегая вперёд хочу сказать, что мой выбор остановился на JavaScript-библиотеке Киевского программиста Владимира Агафонкина LeafLet, которая хотя и уступает библиотеке OpenLayers по возможностям, зато проще в использовании и имеет более качественную документацию.
Вообще, о начинке проекта OpenStreetMap могу сказать следующее. Видно что проект динамично развивается и не имеет какой-либо генеральной линии развития. Основные компоненты проекта написаны на самых разных языках: C++ и Python (Mapnik), Java (JOSM и Osmosis), JavaScript (OpenLayers, но тут уж без альтернатив), Ruby On Rails (веб-сайт OpenStreetMap). Одно время сайт OpenStreetMap хранил свои данные в MySQL, в то время как вся географическая информация хранилась в PostgreSQL. Однако, разработчики сайта всё-таки перешли полностью на PostgreSQL, отказавшись от MySQL.
Из-за такого буйства технологий и энергичности развития бывает довольно трудно подобрать согласованные версии программ, которые бы хорошо работали друг с другом, а документация часто оказывается либо не полной, либо просто устаревшей. Есть много побочных и альтернативных проектов, которые тоже частично устарели, а частично потеряли совместимость с современными версиями программ.
Для облегчения настройки я советую взять Debian 7.0 Wheezy, хотя и на Debian 6.0 Squeeze настройка тоже возможна, но она сопряжена с бОльшими усилиями (подключение сторонних репозиториев, пересборка пакетов и т.п.). Всё дальнейшее описание делается применительно именно к Debian 7.0 Wheezy.
Установка СУБД
Установим пакеты, необходимые нам на этом этапе:
# apt-get install postgresql postgresql-contrib postgresql-9.1-postgis osm2pgsqlНастраиваем авторизацию по паролю в файле /etc/postgresql/9.1/main/pg_hba.conf, заменив первую строчку на вторую:
local all all peer
local all all passwordТеперь выполним тюнинг ядра Linux для увеличения скорости работы PostgreSQL:
# sysctl kernel.shmmax=268435456И пропишем такую же настройку в файле /etc/sysctl.conf:
kernel.shmmax=268435456После тюнинга ядра можно произвести тюнинг самого сервера PostgreSQL. Для этого в файле /etc/postgresql/9.1/main/postgresql.conf изменим следующие строчки:
shared_buffers = 128MB checkpoint_segments = 20 maintenance_work_mem = 256MB autovacuum = offПерезапустим сервер PostgreSQL, чтобы новые настройки вступили в силу:
# /etc/init.d/postgresql restartСоздание базы данных для Mapnik.
Теперь создадим пользователя, базу данных, установим в неё расширения, необходимые для работы Mapnik. Войдём под администратором PostgreSQL:
# su - postgresСоздадим пользователя:
$ createuser -PRDS osmСоздадим базу данных, принадлежащую только что созданному пользователю:
$ createdb -E UTF8 -O osm osmУстановим в базу данных расширение для индексирования геометрических объектов, находящееся в пакете postgresql-contrib:
$ psql -d osm -c "CREATE EXTENSION btree_gist;"Установим в базу данных расширение PostGIS, необходимое для осуществления различных операций над геометрическими объектами. Расширение находится в пакете postgresql-9.1-postgis. Подробнее почитать о функциях, добавляемых PostGIS в PostgreSQL, можно на официальном сайте проекта: PostGIS 1.5.4 Manual.
$ psql -d osm -f /usr/share/postgresql/9.1/contrib/postgis-1.5/postgis.sqlДелаем пользователя osm владельцем таблиц geometry_columns и spatial_ref_sys, чтобы osm2pgsql мог импортировать карты от имени пользователя osm:
$ psql -d osm -c "ALTER TABLE geometry_columns OWNER TO osm; ALTER TABLE spatial_ref_sys OWNER TO osm;"Теперь нужно установить описания проекций. Самому Mapnik'у нужна лишь одна проекция - 900913, проекция Меркатора. Установить её можно с помощью следующей команды:
$ psql -d osm -f /usr/share/doc/osm2pgsql/examples/900913.sqlЯ же установил все доступные проекции, так как в дальнейшем я с помощью SQL-запросов извлекал геометрическую информацию в проекции 4326 WGS84 (обычные широта и долгота), преобразовывая проекцию объектов с помощью функции PostGIS ST_Transform.
$ psql -d osm -f /usr/share/postgresql/9.1/contrib/postgis-1.5/spatial_ref_sys.sqlНа этом настройка базы данных завершается, можно выйти из сеанса пользователя postgres, открытого командой su.
Заливка данных в базу данных Mapnik
Осталось залить карты в базу данных. Для этого можно воспользоваться утилитой из одноимённого пакета osm2pgsql:
$ osm2pgsql -U osm -d osm -W /home/stupin/Downloads/RU-BA_TA_ORE.pbf
4 комментария:
А вы случайно не подскажите методику подбора параметров postgres и ядра для сервера с 35058244k ОЗУ для первой заливки planet.osm?
Подсказать не могу, т.к. сам ставил PostgreSQL всего в двух проектах.
Может быть пригодится вот эта ссылка (там 24 гигабайта оперативы):
http://phpclub.ru/talk/threads/%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0-%D0%B8-%D0%BE%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F-postgres-9-%D0%BD%D0%B0-linux-%D0%BF%D0%BE%D0%B4-%D0%B2%D1%8B%D1%81%D0%BE%D0%BA%D1%83%D1%8E-%D0%BD%D0%B0%D0%B3%D1%80%D1%83%D0%B7%D0%BA%D1%83.66539/
Здравствуйте! Все делаю так же как у вас написано, строго по пунктам. При создании базы и ее настройки никаких ошибок не вылезает. Но при вызове команды: osm2pgsql -U osm -d osm -W /home/romanrich/Загрузки/RU-KOS.osm.pbf, выходит следующая ошибка:
Using projection SRS 900913 (Spherical Mercator)
Couldn't open style file '/usr/share/default.style':No such file or diretory
Error occured, cleaning up
Выходила ли у вас такая ошибка и каким образом ее можно решить?
Используя только Postgre SQL и Mappnik, возможно ли создать свой картографический сервис? Наподобие упрощенного yandex, google, openstreet карт, только offline!?
Спасибо!
В моей системе этот файл находится в /usr/share/osm2pgsql/default.style и идёт в составе пакета osm2pgsql.
Указать, какой файл стилей нужно использовать, можно с помощью опции -S команды osm2pgsql.
В описываемом сервисе отсутствуют средства редактирования карт, он только готовит квадратные растровые картинки с фрагментами карты из её векторного описания по требованию веб-клиента.
Чтобы просматривать карту понадобится ещё какая-нибудь javascript-библиотека, вроде OpenLayers или LeafLet.
Для редактирования карты, как на сайте OpenStreetMap, нужно ещё установить приложение-сайт OpenStreetMap, которое написано на Ruby и использует платформу Rails.
Мне не удалось описать установку этого приложения так, чтобы следуя инструкциям удалось получать воспроизводимый результат. Я устанавливал приложение два раза. Первый раз оно заработало, но неприемлемо медленно. Когда я ставил приложение второй раз, следуя своим заметкам, мне так и не удалось его завести. Нужный мне результат я мог получить и без него, используя только JOSM, поэтому я особо и не упирался.
Отправить комментарий