Установка и настройка генерации тайлов на основе OSM данных под Windows
Недавно по работе возникла задача генерации тайлов на основе OSM данных. Поискал, прочитал несколько статей, но везде фигурировали *nix-системы, а у меня был в наличии сервер под управлением Windows. В конце-концов, более-менее внятный туториал нашёлся, но он слегка устарел и не везде подробен, посему пришлось повозиться. После удачного завершения подумал, что мой опыт будет полезен.
Кого заинтересовал, прошу под кат.
Вводные- PostgreSQL (использовал 9.4.4) — БД для хранения геоинформации из дампа OSM.
- PostGIS (использовал 2.1) — расширение БД для работы с геоинформацией.
- Osm2pgsql — утилита для импорта дамп OSM данных в БД.
- Mapnik (использовал 2.2.0) — утилита для генерации тайлов.
- Патч для GiST-индексов в PostGIS
- Python 2.х (использовал 2.7.10) — на нём написаны скрипты генерации тайлов.
- PROJ.4 — библиотека картографических проекций.
- SVN-клиент (использовал TortoiseSVN) — для выкачивания скриптов генерации тайлов от OSM, см. ниже.
- Скрипты генерации от OSM (использовал ревизию 31519)
- OSM информация: линии побережья и всё такое.
Дистрибутив можно взять с офсайта. Установка достаточно тривиальна, однако, есть пара моментов.
Во-первых, возможно, следует изменить директорию, где хранится БД (может потребоваться до терабайта, в случае использования OSM данных для всей планеты). По умолчанию (для версии 9.4) это C:\Program Files\PostgreSQL\9.4\data
Во-вторых, возможно, следует изменить локаль кластера. В моём случае на Russian, Russia . При установке у вас также спросят пароль для сервера PostgreSQL, он ещё понадобится, запомните его.
После установки самого PostgreSQL, запустится StackBuilder, мастер установки расширений для БД. Нужно выбрать два расширения: Spatial Extensions -> PostGIS и Database Drivers -> JDBC. Все настройки при установке по-умолчанию. В процессе установки PostGIS будет запрос на создание системной переменной и ещё пара вопросов, соглашайтесь. После этого нужно перезапустить службу PostgreSQL.
Далее добавьте bin директорию PostgreSQL в PATH . После добавления нужно выйти из системы и войти заново (logoff-login), чтобы настройки применились.
Проверяем корректность установки, понадобится вспомнить пароль, который вы вводили на этапе установки. Находим в программах pgAdmin III и запускаем. В списке серверов будет единственный localhost:5432 , подключаемся. Если не удаётся, скорее всего, служба не запущена.
Создаём шаблон для базы геоданных:
Добавляем два расширения в шаблон: postgis и postgis_topology . Отключаемся от этой базы.
Создаём базу данных gis на основе шаблона template_postgis_20 :
Берём патч для PostGIS GiST отсюда. Патчим из командной строки:
База данных готова.
2. Установка и настройка Osm2pgsqlМожно взять последний релиз с гитхаба и собрать самому, а можно взять готовый артефакт отсюда.
Скачиваем, распаковываем, переименовываем для удобства в osm2pgsql . Добавляем эту директорию в переменную PATH . Logoff-login. Проверяем, что всё работает:
Должна вывестись справка. Берём последний default.style из репозитория на гитхабе.
Всё готово для импорта OSM данных.
Карта планеты в сжатом виде весит
40 Гб. Для примера можно взять карту Москвы, например, отсюда. Скачиваем.
Для импорта выполняем в командной строке:
Параметр -s , т.е. slim — режим, при котором временные данные хранятся в БД. Это замедляет процесс, увеличивает использование диска, но уменьшает использование оперативной памяти.
Если всё правильно, будет запрос пароля и начнётся импорт дампа в БД. В первых строчках будут всякие предупреждения, не пугайтесь, всё в порядке. После завершения импорта будет выведено что-то вроде:
Геоданные в базе.
3. Установка Python'а 2.xСкачиваем дистрибутив x86 (потому что бинарники Mapnik для Windows есть только x86) отсюда. Ставим, настройки по-умолчанию, кроме одного: стоит отметить «Добавить python.exe в PATH», или сделать это ручками после установки. Logoff-login.
Проверяем правильность установки:
4. Установка и настройка Mapnik'аОпять-таки есть два варианта: или собирать самому из исходников с гитхаба, или взять готовые бинарники здесь. Ищем Windows 32 bit Package , скачиваем, распаковываем в C:\mapnik-v2.2.0 .
У них есть довольно подробный мануал по установке в вики. Вкратце: добавить lib и bin директории мапника в PATH , это раз. Создать новую системную переменную PYTHONPATH и присвоить ей путь до C:\mapnik-v2.2.0\python\2.7\site-packages , это два. Поставить этот vcredist, это три. Logoff-login.
Проверяем правильность установки: Возможные ошибки разобраны в вики. Но помимио этого стоит попробовать перенести пути до lib и bin в начало PATH .
И генерим тестовые тайлы:
Идём на гитхаб, находим библиотеку PROJ.4, находим бинарники: Prebuilt Win32 executables, DLL including NAD27 grid shift files . Скачиваем, распаковываем ( c:\proj ). В PATH добавляем путь до bin , в новую переменную PROJ_LIB путь до nad . Logoff-login.
Скачиваем скрипты для генерации тайлов из официального svn-репозитория, кладём в c:\mapnik .
Далее, для работы скрипта нужны береговые линии и всякое такое. Для этого есть скрипт get-coastlines.sh , однако он написан на баше и под Windows работать не будет. Но он довольно простой и короткий, поэтому просто повторим все действия ручками.
Последние приготовления. Идём в mapnik\inc , файл settings.xml.inc.template переименовываем в settings.xml.inc .
Файл fontset-settings.xml.inc.template в fontset-settings.xml.inc .
Файл datasource-settings.xml.inc.template в datasource-settings.xml.inc и правим его:
Немного поправим скрипт generate_tiles.py : Блок на строке 193: заменяем на
Указываем границы в которых будет производиться генерация тайлов (географические координаты прямоугольника):
На строке 213 перед пишем (в нашем случае Москвы)
Указываем пути и запускаем генерацию тайлов:
Процесс должен пойти. Займёт от нескольких минут до недель (в случае всего мира и не самой мощной машины).