Linux

Личный OpenStreetMap (OSM)

Последний раз наткнулся на такое сообщение: «В diaspora* wiki для подминов написано, что запуск собственного сервера diaspora* требует технических умений и времени.» Эта цитата с хабра лучше всего опишет данный мануал по установке и настройке OpenStreetMap.

Если решили установить свой OpenStreetMap, значит вам это нужно либо по работе, либо по личной цели, иных причин использовать свою карту в принципе и нет. Но раз потребность возникла, значит придется пройти трудный путь. Идею пройти данный путь подкинул azbukait, думаю без него этот мануал не появился бы на свет.

Для начала нам нужен сервер, в качестве операционной системы будем использовать Ubuntu 16.04, железная часть будет следующая:

  • Core i3
  • 8 Gb
  • SSD 256 Gb

По большей части (95%) операций будет выполняться под пользователем root.

Обновление.

Проверим обновление  для системы и при необходимости произведем обновление.

PostgreSQL и PostGIS.

Мы будем использовать PostgreSQL для хранения картографических данных. PostGIS — это геопространственное расширение для PostgreSQL.

Пользователь postgres будет создан в ОС в процессе установки. Это суперпользователь для сервера баз данных PostgreSQL. По умолчанию у этого пользователя нет пароля и нет необходимости его устанавливать, так как для переключения на пользователя postgres можно использовать sudo:

Теперь создаем пользователя базы данных PostgreSQL — osm.

Далее создаем базу данных с именем gis и одновременно с эти делаем osm владельцем базы данных. -E UTF8 определяет схему кодировки символов, которая будет использоваться в базе данных.

Создаем расширение hstore и postgis в базе данных gis.

После выходим из пользователя postgres.

Пользователь OSM.

Создаем пользователя osm в операционной системе, чтобы сервер мог работать от имени пользователя osm.

Попросит ввести личные данные и пароль для нового пользователя.

Стили и картографические данные.

Скачиваем таблицу стилей и картографические данные. Это необходимо делать под пользователем osm.

Ключ -с используется для продолжения закачки при обрыве связи.

Увеличиваем Swapfile.

Импорт картографических данных занимает много оперативной памяти. Если памяти мало, можно добавить файл подкачки. Делим память на 2 и получаем 4. После перезагрузки файл подкачки вернется в значение по умолчанию.

Настраиваем SSH.

Процесс импорта может занять некоторое время. Настроим поддержку активности SSH, чтобы не потерять подключение SSH.

Импорт картографических данных в PostgreSQL.

  • —create — очищает базу и добавляет новые данные;
  • —append — не очищает базу и добавляет новые данные;
  • —slim — указывает osm2pgsql создавать “тонкие” таблицы для хранения данных при импорте, а не пытаться хранить все в памяти. —slim также необходим, если мы хотим обновить данные;
  • —cache — больший размер кэша приводит к более быстрой скорости импорта, но нужно иметь достаточно оперативной памяти для использования кэша;
  • —number-processes — количество ядер используемых у процессора;
  • —hstore — это хранилище ключей и значений, поддерживающее произвольные ключи и значения;
  • —style — путь к файлу стиля, который сообщает osm2pgsql, какие столбцы создавать;
  • —multi-geometry — указывает osm2pgsql не разбивать мультиполигоны на отдельные полигоны. Это повышает гибкость и устраняет некоторые артефакты визуализации, но немного медленнее.

При загрузке потребуется некоторое время, чтобы построить индексы, поэтому может показаться, что в конце ничего не происходит. Проверить, что происходит в базе данных можно с помощью команды — pg_top -d (sudo apt install pgtop).

Понять, что импорт завершен, можно увидев следующее сообщение:

Импорт завершен.

Osm2pgsql took 15496s overall

Импорт занимает достаточное время, к примеру Россия занимает до 8 часов! После импорта, выходим из пользователя OSM.

Установка модуля mod_tile.

mod_tile — это модуль Apache, необходимый для обслуживания плиток карт.

Создание таблицы стилей Mapnik.

Шрифты необходимые для стилей.

sudo apt-get install fonts-noto-cjk fonts-noto-hinted fonts-noto-unhinted ttf-unifont -y

Настройка renderd

Вносим изменения в конфигурационный файл:

В секцию [default] вносим следующие изменения:

В секцию [mapnik] вносим следующие изменения:

Сохраняем файл.

Теперь необходимо поправить настройки запуска renderd, скопировав пример.

Внесем изменения в скрипт запуска:

Создаем файл и делаем владельцем этого файла пользователя — osm.

Запускаем службу визуализации

Настройка Apache

Установка Apache web server

Создаем файл загрузки модуля.

Создаем символьную ссылку

Редактируем файл виртуальных хостов.

Вставляем в раздел <VirtualHost *:80> следующие строки:

Сохраняем файл и перезапускаем Apache

Проверка работы карты.

Открываем браузер и переходим по адресу:

server-ip/osm_tiles/0/0/0.png

Если открывается карта, то все настроено верно.

Отображение карты.

Для отображения карты OpenStretMap можно использовать два варианта — OpenLayer and Leaflet. В своем примере буду использовать Leaflet.

Делаем на всякий случай резервную копию файла index.

Удаляем старый файл index.

Создаем свою страничку с картой.

В качестве примера используем Leaflet, страну Россия, город Москва.

Строчку server-ip заменяем на адрес своего сервера. Теперь открыв адрес своего сервера в браузере можно увидеть карту:

В итоге получаем свой собственный сервер карт. Для чего он нужен? Ну тут уже каждый сам решает, как я в принципе упоминал выше. Многие скажут зачем, когда можно использовать Яндекс или Гугл, но количество запросов к карте ограниченно в бесплатной версии.

Так же можно использовать готовый скрипт с github, но как показала практика последнего использования, в нем есть ошибка. По крайней мере в версии для Ubuntu 16 она точно есть, остальные не проверял.

Osm2pqsql failed due to ERROR: Couldn’t open style file ‘/usr/local/share/maps/style/openstreetmap-carto-3.0.x/openstreetmap-carto.style’: No such file directory

Ошибка заключается в определении версии openstreetmap carto, если изменить версию на используемую в скрипте, то ошибок не будет.

Поделиться статьей:

5 комментариев

  • Антон

    Cпотыкается на этапе Импорте картографических данных в PostgreSQL (osm2pgsql —create —slim —cache 7000 —number-processes 4 —hstore —style openstreetmap-carto-2.41.0/openstreetmap-carto.style —multi-geometry russia.osm.pbf) выдаёт ошибку osm2pgsql version 0.94.0 (64 bit id space)
    Using built-in tag processing pipeline
    Using projection SRS 3857 (Spherical Mercator)
    Osm2pgsql failed due to ERROR: Connection to database failed: FATAL: database «osm» does not exist

  • kanitelka

    Делали все по порядку? Мне кажется следует проверить две вещи:
    1. Под каким пользователем пытаетесь загрузить.
    2. Существует ли данная база OSM.

  • Антон

    Всё делал по порядку согласно инструкции. 1) делал под su — osm. и под основной тоже пробовал. 2) Существует, но ошибка пишет обратное.

  • kanitelka

    Попробовал на виртуальной машине загрузить, все проходит без ошибок.
    Интересуют следующие вещи:
    — какая версия Ubuntu используется
    — характеристики сервера (память, количество ядер, объем жесткого диска)
    — вывод команды ls (LS) под пользователем osm

    Для ускорения процесса тестирования можно использовать не Россию, а другую страну которая меньше по размеру, к примеру Центральную Америку http://download.openstreetmap.fr/extracts/central-america.osm.pbf

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *