Содержание

OSM The Eurasia Ubuntu 20.04

Тайл-сервер является основным инструментом для генерации и предоставления тайлов пользователям в мире OpenStreetMap. Это набор программ и библиотек, позволяющий эффективно обрабатывать географические данные и создавать картографические тайлы, представляющие собой небольшие изображения карты для отображения на веб-сайтах или мобильных приложениях. Важно понимать, что существует несколько различных конфигураций тайл-серверов, каждая из которых имеет свои плюсы и минусы.
Руководство по запуску стандартного тайл-сервера, аналогичного тому, используемому на серверах OpenStreetMap.org, может быть полезным для тех, кто только начинает знакомиться с этой областью. Обычно такие инструкции включают в себя установку необходимого программного обеспечения, настройку базы данных геоданных, настройку веб-сервера и самого тайл-сервера, а также запуск и тестирование процесса генерации тайлов.

В результате выполнения всех необходимых шагов по установке и настройке тайл-сервера, пользователь сможет получить доступ к генерируемым тайлам через веб-приложения или мобильные устройства. Это отличное решение для тех, кто хочет создать собственный проект на основе картографических данных OpenStreetMap и обеспечить пользователям доступ к персонализированным картам.

Введение

В данном руководстве установка программного обеспечения производиться на оборудование следующей конфигурации:

Конфигурация вашего оборудавания будет соответственно отличаться, но это так-же будет работать, заняв больше времени при установке и рендере карт на устройстве с минимальными параметрами:

Все ниже написанное относиться к Ubuntu Server 20.04 (Focal Fossa) и протестировано в августе 2024 года.

:&1: Примечание: В этом руководстве многое загружается с альтернативных, а не с официальных зеркал, по причине скорости загрузки и неизменности файлов в репозитории для данного руководства.

Общая теория

Tile Server OSM представляет собой набор программ и библиотек, которые работают вместе для создания тайлового (плиточного) сервера. Он состоит из 5 основных компонентов:

Postgresql/postgis - базы данных. Mod_tile — это модуль http сервера apache, который обслуживает кэшированные тайлы и решает, какие тайлы нуждаются в повторном рендеринге — либо потому, что они еще не кэшированы, либо потому, что они устарели. Mapnik — это программная библиотека, которая осуществляет реальный рендеринг с использованием открытого рендеринга.

:&2: Предполагается, что вы запускаете все от пользователя без регистрации root через «sudo». Имя пользователя без root, повторяемое по умолчанию, — «eva». Если вы указываете иного пользователя, то вам необходимо будет заменить во всех командах на свое имя и добавить его в группу пользователей, которые могут использовать sudo для получения root-прав. Из вашей обычной учетной записи пользователя без регистрации root.

:&2: Общая последовательнось действий:

Обновление программного обеспечения

sudo apt --yes update; sudo apt --yes upgrade -y

Установка необходимых библиотек

sudo apt --yes install screen libboost-all-dev git tar unzip wget bzip2 build-essential autoconf libtool libxml2-dev libgeos-dev libgeos++-dev libpq-dev libbz2-dev libproj-dev munin-node munin protobuf-c-compiler libfreetype6-dev libtiff5-dev libicu-dev libgdal-dev libcairo2-dev libcairomm-1.0-dev apache2 apache2-dev libagg-dev liblua5.2-dev ttf-unifont lua5.1 liblua5.1-0-dev

Установка postgresql/postgis

sudo apt --yes install postgresql postgresql-contrib postgis postgresql-12-postgis-3 postgresql-12-postgis-3-scripts

sudo service postgresql restart

pg_isready

sudo -u postgres -i

createuser eva

createdb -E UTF8 -O eva gis

psql

\c gis

CREATE EXTENSION postgis;
CREATE EXTENSION hstore;
ALTER TABLE geometry_columns OWNER TO eva;
ALTER TABLE spatial_ref_sys OWNER TO eva;



(ответ CREATE EXTENSION)
(ответ CREATE EXTENSION)
(ответ ALTER TABLE)
(ответ ALTER TABLE)

\q

exit

sudo useradd -m eva

sudo passwd eva

Установка osm2pgsql

sudo apt install osm2pgsql

Mapnik

sudo apt --yes install autoconf apache2-dev libtool libxml2-dev libbz2-dev libgeos-dev libgeos++-dev libproj-dev gdal-bin libmapnik-dev mapnik-utils python3-mapnik python3-psycopg2 python3-yaml

python3

import mapnik

quit()

Установка mod_tile и render

Скомпилируем исходный код mod_tile

mkdir ~/src
cd ~/src

:&1: Примечание: В этом руководстве mod_tile загружается с альтернативных, а не с официальных зеркал (https://github.com/SomeoneElseOSM/mod_tile.git), по причине неизменности файлов в репозитории для данного руководства.

git clone -b switch2osm https://git.wwoss.ru/root/mod_tile.git

cd mod_tile

./autogen.sh

./configure

make

sudo make install

sudo make install-mod_tile

sudo ldconfig

Конфигурация таблицы стилей

cd ~/src

:&1: Примечание: В этом руководстве openstreetmap-carto загружается с альтернативных, а не с официальных зеркал (https://github.com/gravitystorm/openstreetmap-carto), по причине неизменности файлов openstreetmap-carto в репозитории для данного руководства.

git clone https://git.wwoss.ru/root/openstreetmap-carto.git

cd openstreetmap-carto

sudo apt --yes install npm

sudo npm install -g carto

carto -v

carto project.mml > mapnik.xml

:&2: Примечание: все предупреждения
Warning: style/admin.mss:22:18 Styles do not match layer selector #admin-low-zoom.
Warning: style/admin.mss:18:6 Styles do not match layer selector #admin-low-zoom.
Игнорируем

Загрузка данных

mkdir ~/data
cd ~/data

:&1: Примечание: В этом руководстве файлы «.osm.pbf» загружается с альтернативных, а не с официальных зеркал (https://download.geofabrik.de/), по причине скорости загрузки с данного репозитория для данного руководства.
:&2: Последовательность: Сейчас мы загрузим 3 небольшие карты (georgia, moldova и azerbaijan), произведем их слияние (для понимания и наглядного примера слияния) и с ними продолжим установку и настройку сервера. Так-же загрузим небольшую карту (andorra) для примера дозагрузки карт в базу и конечно карты Europe (28.9 GB) и Asia (13.1 GB). Europe и Asia поставим на слияние и загрузим в базу в конце статьи, на уже подготовленный нами и проверенный (рабочий) сервер.

wget https://wwoss.ru/openstreetmap/europe/europe-sub-region/georgia-latest.osm.pbf
wget https://wwoss.ru/openstreetmap/europe/europe-sub-region/moldova-latest.osm.pbf
wget https://wwoss.ru/openstreetmap/asia/asia-sub-region/azerbaijan-latest.osm.pbf

wget https://wwoss.ru/openstreetmap/europe/europe-sub-region/andorra-latest.osm.pbf

wget https://wwoss.ru/openstreetmap/europe/europe-latest.osm.pbf
wget https://wwoss.ru/openstreetmap/asia/asia-latest.osm.pbf


sudo apt install osmctools

cd ~/data
osmconvert georgia-latest.osm.pbf --out-o5m | osmconvert - moldova-latest.osm.pbf -o=new-latest.osm.pbf

osmconvert azerbaijan-latest.osm.pbf --out-o5m | osmconvert - new-latest.osm.pbf -o=new.osm.pbf

cd ~/data
osm2pgsql -d gis --create --slim  -G --hstore --tag-transform-script ~/src/openstreetmap-carto/openstreetmap-carto.lua -C 64000 --number-processes 8 -S ~/src/openstreetmap-carto/openstreetmap-carto.style ~/data/new.osm.pbf



:&2: Дополнение: Откроем второе окно программы Putty и поставим слияник карт Europe и Asia, чтобы к концу статьи у нас уже был объедененный файл «eurasia.osm.pbf»

cd ~/data
osmconvert europe-latest.osm.pbf --out-o5m | osmconvert - asia-latest.osm.pbf -o=eurasia.osm.pbf

Догрузка карт в базу данных

:&9: Внимание!: Этот шаг выполняеся только в случае необходимости дозагрузки в готовую базу данных дополнительных файлов, в нашем случае сейчас пропустим этот подраздел, перейдем в радел "Создание индексов" и вернемся сюда в конце статьи при уже настроенном сервере. (этот шаг указан в этом разделе т.к команды эдинтичные с разницей в способе загрузки (--create/--append)).

cd ~/data
osm2pgsql -d gis --append --slim  -G --hstore --tag-transform-script ~/src/openstreetmap-carto/openstreetmap-carto.lua -C 64000 --number-processes 8 -S ~/src/openstreetmap-carto/openstreetmap-carto.style ~/data/andorra-latest.osm.pbf

Командные опции:

должна завершится чем-то вроде «Osm2pgsql в целом занял 312 секунд».

Создание индексов

cd ~/src/openstreetmap-carto/

scripts/get-external-data.py

Загрузка Shape-файла

cd ~/src/openstreetmap-carto/
scripts/get-external-data.py

Шрифты

cd ~/src/openstreetmap-carto/

scripts/get-fonts.sh

Настройка веб-сервера

визуализация

sudo nano /usr/local/etc/renderd.conf

Настройка Apache

sudo mkdir /var/lib/mod_tile

sudo chown eva /var/lib/mod_tile

sudo mkdir /var/run/renderd

sudo chown eva /var/run/renderd

sudo nano /etc/apache2/conf-available/mod_tile.conf

LoadModule tile_module /usr/lib/apache2/modules/mod_tile.so

sudo a2enconf mod_tile

systemctl start apache2

systemctl reload apache2

sudo nano /etc/apache2/sites-available/000-default.conf

LoadTileConfigFile /usr/local/etc/renderd.conf
ModTileRenderdSocketName /var/run/renderd/renderd.sock
# Timeout before giving up for a tile to be rendered
ModTileRequestTimeout 0
# Timeout before giving up for a tile to be rendered that is otherwise missing
ModTileMissingRequestTimeout 30

service apache2 reload

Запуск рендера в первый раз

sudo -u 'eva' renderd -f -c /usr/local/etc/renderd.conf

systemctl stop renderd

cd ~/data
osm2pgsql -d gis --append --slim  -G --hstore --tag-transform-script ~/src/openstreetmap-carto/openstreetmap-carto.lua -C 64000 --number-processes 8 -S ~/src/openstreetmap-carto/openstreetmap-carto.style ~/data/andorra-latest.osm.pbf

sudo -u 'eva' renderd -f -c /usr/local/etc/renderd.conf

:&2: Примечание:Иногда рендер идет с командой, т.е. без sudo -u 'eva'

renderd -f -c /usr/local/etc/renderd.conf
systemctl stop renderd

Запуск рендера в фоновом режиме

nano ~/src/mod_tile/debian/renderd.init


sudo cp ~/src/mod_tile/debian/renderd.init /etc/init.d/renderd

sudo chmod u+x /etc/init.d/renderd

sudo cp ~/src/mod_tile/debian/renderd.service /lib/systemd/system/

sudo /etc/init.d/renderd start

sudo systemctl enable renderd

cd ~/data
ls -n

sudo rm andorra-latest.osm.pbf
sudo rm asia-latest.osm.pbf
sudo rm azerbaijan-latest.osm.pbf
sudo rm europe-latest.osm.pbf
sudo rm georgia-latest.osm.pbf
sudo rm moldova-latest.osm.pbf
sudo rm new-latest.osm.pbf
sudo rm new.osm.pbf

ls -n

cd ~/data
osm2pgsql -d gis --create --slim  -G --hstore --tag-transform-script ~/src/openstreetmap-carto/openstreetmap-carto.lua -C 64000 --number-processes 8 -S ~/src/openstreetmap-carto/openstreetmap-carto.style ~/data/eurasia.osm.pbf

sudo -u eva render_list -a -n 16  --map=ajt --tile-dir=/var/lib/mod_tile/ajt --min-zoom=0 --max-zoom=10 --force
Использование: render_list [ОПЦИЯ] ...
  -a, --all визуализировать все плитки в заданном диапазоне масштабирования вместо чтения из STDIN
  -f, --force отображать плитки, даже если они кажутся текущими
  -m, --map=MAP отображает тайлы на этой карте (по умолчанию «по умолчанию»)
  -l, --max-load=ЗАГРУЗИТЬ спящий режим, если нагрузка настолько высока (по умолчанию 16)
  -s, --socket=SOCKET имя доменного сокета unix для связи с renderd
  -n, --num-threads=N количество параллельных потоков запросов (по умолчанию 1)
  -t, --tile-dir Каталог тайлового кэша (по умолчанию «/var/lib/mod_tile»)
  -z, --min-zoom=Ввод фильтра ZOOM для рендеринга только тех фрагментов, которые больше или равны этому уровню масштабирования (по умолчанию – 0)
  -Z, --max-zoom=Ввод фильтра ZOOM для рендеринга только плиток, меньших или равных этому уровню масштабирования (по умолчанию — 20)
Если вы используете --all, вы можете ограничить диапазон плиток, добавив следующие параметры:
  -x, --min-x=X минимальная координата X плитки
  -X, --max-x=X максимальная координата X тайла
  -y, --min-y=Y минимальная координата Y тайла
  -Y, --max-y=Y максимальная координата тайла Y
Без --all отправить список тайлов для рендеринга из STDIN в формате:
  Х Y Я
например
  0 0 1
  0 1 1
  1 0 1
  1 1 1
Вышеупомянутое приведет к отображению всех 4 плиток при масштабировании 1.

Дополнения и Файлы