Это старая версия документа!
Содержание
Tile map server
Введение
На этой странице показано, как можно использовать OpenStreetMap Carto для реализации тайлового сервера с использованием того же программного обеспечения, что и OpenStreetMap. Он включает в себя пошаговые инструкции по установке Tile Server на основе Ubuntu и ограничен описанием некоторых передовых методов, учитывая, что основной целью этого сайта является предоставление руководств по настройке среды разработки OpenStreetMap Carto и предложение рекомендации по редактированию стиля.
OSM Tile Server — это веб-сервер, специализирующийся на предоставлении растровыхрастровых карт, представляющих их как статические плитки и способный выполнять рендеринг в реальном времени или предоставлять кэшированные изображения. Веб-программное обеспечение, принятое OpenStreetMap, представляет собой Apache HTTP Server вместе со специальным подключаемым модулем с именем mod_tile и связанным с ним внутренним стеком, способным генерировать плитки во время выполнения; программы и библиотеки объединены в цепочку для создания сервера тайлов.
Как это часто бывает с OpenStreetMap, существует множество способов достижения цели, и почти все компоненты имеют альтернативы, которые имеют различные преимущества и недостатки. В этом руководстве описывается стандартный процесс установки OSM Tile Server, используемого на OpenStreetMap.org.
Он состоит из следующих основных компонентов:
- Mapnik
- Apache
- Mod_tile
- renderd
- osm2pgsql
- PostgreSQL/PostGIS database, to be installed locally (suggested) or remotely (might be slow, depending on the network).
- carto
- openstreetmap-carto
Все упомянутое программное обеспечение является открытым исходным кодом.
Для тайлового сервера требуется база данных PostGIS , в которой хранятся геопространственные объекты, заполненные инструментом osm2pgsql из данных OSM. Кроме того, необходим каталог файловой системы, включающий файл OSM.xml, символы карты (проверьте подкаталог openstreetmap-carto/symbols) и шейп-файлы (проверьте подкаталог openstreetmap-carto/data). OSM.xml предварительно создается инструментом carto из стиля openstreetmap-carto (project.mml и все связанные файлы CartoCSS, включенные в openstreetmap-carto).
Когда веб-сервер Apache получает запрос от браузера, он вызывает подключаемый модуль mod_tile, который, в свою очередь, проверяет, была ли плитка уже создана (из предыдущего рендеринга) и кэширована, чтобы она была готова к использованию; в этом случае mod_tile немедленно отправляет плитку обратно на веб-сервер. И наоборот, если запрос необходимо отобразить, то он ставится в очередь на серверную часть рендеринга , которая отвечает за вызов Mapnik для выполнения фактического рендеринга; renderd — это процесс- демон , включенный в исходники mod_tile и связанный с mod_tile через очереди UNIX. визуализированныйявляется стандартным бэкэндом, используемым в настоящее время www.openstreetmap.org, даже если некоторые реализации OSM используют Tirex; Mapnik извлекает данные из базы данных PostGIS в соответствии с информацией о стиле openstreetmap-carto и динамически отображает тайл. renderd возвращает созданный тайл на веб-сервер и, в свою очередь, в браузер.
Демон renderd реализует механизм очередей с несколькими уровнями приоритета, чтобы обеспечить актуальность просмотра с учетом доступных ресурсов рендеринга. Наивысший приоритет — для рендеринга «на лету» тайлов, еще не находящихся в кэше тайлов, два уровня приоритета для повторного рендеринга устаревших тайлов «на лету» и две очереди фонового пакетного рендеринга. Чтобы избежать проблем с каталогами, которые становятся слишком большими, и чтобы избежать слишком большого количества крошечных файлов, Mod_tile / renderd хранит визуализированные тайлы в «метатайлах», в специальной хешированной структуре каталогов1).
Даже если тайловый сервер динамически генерирует тайлы во время выполнения, они также могут быть предварительно визуализированы для просмотра в автономном режиме с помощью специального инструмента с именем render_list, который обычно используется для предварительного рендеринга тайлов с низким уровнем масштабирования и требует значительного времени для выполнения процесса (десятки часов в случае, если вся планета предварительно визуализируется); эта утилита включена в mod_tile , а также в другой инструмент с именем render_expired, который предоставляет методы для разрешения истечения срока действия тайлов карты. Более подробное описание render_list и render_expired можно найти на их справочных страницах.
Справочную информацию о методе истечения срока действия тайлов можно найти в механизме истечения срока действия тайлов.
Общая настройка для Ubuntu
Обновите Ubuntu
Убедитесь, что ваша система Ubuntu полностью обновлена:
lsb_release -a
команда возвращает версию Ubuntu.
Чтобы обновить систему:
sudo apt-get update
команда загружает списки пакетов из репозиториев и «обновляет» их, чтобы получить информацию о новейших версиях пакетов и их зависимостях. Это будет сделано для всех репозиториев и PPA. Из http://linux.die.net/man/8/apt-get
sudo apt list --upgradable
команда выведит списки пакетов готовых к обновлению
sudo apt-get -y upgrade
команда обновляет все устаревшие пакеты и применить исправления безопасности с выводом подсказок « Да» или «Нет », спрашивая, нужно ли устанавливать зависимые пакеты или нет. Если вы устанавливаете большой пакет или пакет с большим количеством зависимостей, или устанавливаете несколько пакетов, ответы на эти запросы не позволят вам переключиться на выполнение какой-либо работы.
sudo apt upgrade
команда обновляет все устаревшие пакеты и применить исправления безопасности
Установите необходимые инструменты
Основные элементы:
sudo apt-get -y install ca-certificates gnupg curl unzip gdal-bin \ tar wget bzip2 build-essential clang python3-psycopg2 python3-yaml \ python3-requests postgresql-client
sudo apt-get -y install munin-node munin protobuf-c-compiler libtiff5-dev libcairomm-1.0-dev libagg-dev lua5.1 liblua5.1-0-dev
Проверьте предварительные условия, предложенные openstreetmap-carto.
FROM ubuntu:bionic
# # Зависимости стиля
RUN apt-get update && apt-get install --no-install-recommends -y \
ca-certificates curl gnupg postgresql-client python3 python3-distutils \
fonts-hanazono fonts-noto-cjk fonts-noto-hinted fonts-noto-unhinted \
mapnik-utils nodejs npm ttf-unifont unzip && rm -rf /var/lib/apt/lists/*
# Kosmtik with plugins, forcing prefix to /usr because bionic sets
# npm prefix to /usr/local, which breaks the install
RUN npm set prefix /usr && npm install -g kosmtik
РАБОЧИЙ КАТАЛОГ /usr/lib/node_modules/kosmtik/
RUN kosmtik plugins --install kosmtik-overpass-layer \
--install kosmtik-fetch-remote \
--install kosmtik-overlay \
--install kosmtik-open-in-josm \
--install kosmtik-map-compare \
--install kosmtik-osm-data-overlay \
--install kosmtik-mapnik-reference \
--install kosmtik-geojson-overlay \
&& cp /root/.config/kosmtik.yml /tmp/.kosmtik-config.yml
# Closing section
RUN mkdir -p /openstreetmap-carto
WORKDIR /openstreetmap-carto
USER 1000
CMD sh scripts/docker-startup.sh kosmtik =====
установим npm, диспетчер пакетов Node.js. Для этого установите пакет npmс помощью apt:
sudo apt install npm
перейдем в режим суперпользователя
sudo -i
apt-get update && apt-get install --no-install-recommends -y \
ca-certificates curl gnupg postgresql-client python3 python3-distutils \
fonts-hanazono fonts-noto-cjk fonts-noto-hinted fonts-noto-unhinted \
mapnik-utils nodejs npm ttf-unifont unzip && rm -rf /var/lib/apt/lists/*
<color #ed1c24>E: Package 'ttf-unifont' has no installation candidate</color>
пакет 'ttf-unifont' установим позже (сейчас не критично)
к проверке установки kosmtik вернемся после установки Node.js
Для последующих шагов установки мы предполагаем, что:
cd - по умолчанию используется ваш домашний каталог.
Настроить swap
SWAP (своп) — это механизм виртуальной памяти, при котором часть данных из оперативной памяти (ОЗУ) перемещается на хранение на HDD (жёсткий диск), SSD (твёрдотельный накопитель).
Импорт картографических данных и управление ими занимают много оперативной памяти, и обычно требуется swap.
Чтобы проверить, настроен ли раздел подкачки в вашей системе, используйте одну из следующих двух команд:
swapon -s
- • 4gb файла подкачки
free -m
Отображение количества свободной и используемой памяти в системе (отметьте строку, указывающую Swap ):
в данном случае используется:
- • ОЗУ: 544mb из доступных 16gb
- • файл подкачки: 0mb из доступных 4gb.
Если у вас нет активного раздела подкачки, особенно если ваша физическая память мала, вам следует добавить файл подкачки. Создайте файл подкачки размером 2G в корневой файловой системе:
sudo fallocate -l 2G /swapfile
Установим правильный тип разрешений.
sudo chmod 600 /swapfile
Используйте mkswap утилиту, чтобы настроить файл как область подкачки Linux:
sudo mkswap /swapfile
sudo mkswap /swapfile
free -m
Чтобы сделать изменение постоянным, откройте /etc/fstab файл и добавьте следующую строку:
- /etc/fstab
/swapfile swap swap defaults 0 0
Откроем файл fstab, находящийся в папке ets в редакторе:
vi /etc/fstab
- i -начало редактирования
- esc -конец редактирования
- :wq! -сохранение и выход из редактора
Настройка переменных локализации
- Locale — это набор переменных среды, которые определяют язык, страну и настройки кодировки символов (или любые другие особые предпочтения варианта) для ваших приложений и сеанса оболочки в системе Linux. Эти переменные среды используются системными библиотеками и локальными приложениями в системе.
- Конфигурационный файл находится /etc/default/locale.
- Просмотрим, какие локали в настоящее время определены для текущей учетной записи пользователя:
locale
Чтобы установить локализацию ru_RU:
export LANGUAGE=ru_RU.UTF-8 export LANG=ru_RU.UTF-8 export LC_ALL=ru_RU.UTF-8
- Экспортированные переменные можно поместить в файл /etc/environment.
- Новые локали также можно создать, выполнив:
sudo locale-gen ru_RU ru_RU.UTF-8 sudo dpkg-reconfigure locales
- если ошибка изменения локализации:
Создание пользователя UNIX
- Мы предполагаем, что вы уже создали пользователя для входа во время установки Ubuntu Server, который будет использоваться для запуска сервера тайлов. Предположим, что выбранное вами имя пользователя — alisa. В этом документе каждый раз, когда будет упоминается alisa, замените его своим фактическим именем пользователя.
- Если вам нужно создать нового пользователя:
sudo useradd -m alisa sudo passwd alisa
- Установите пароль при появлении запроса.
- Повторите пароль для правильности ввода.
Установить Git
Иногда Git может быть уже предустановлен.
git --version
в случае отсутствия установим:
apt-get install -y git
Установка библиотеки Mapnik
Mapnik используется для рендеринга данных OpenStreetMap в тайлы, управляемые веб-сервером Apache через renderd и mod_tile. Эта установка предусматривает, что все команды выполняются в окружении обычной учетной записи (не root) с использованием «sudo». Не пытайтесь и не делайте все в окружении root; система не будет работать. (выход: exit)
exit
Создайте в корне каталог src для загрузки исходников
mkdir -p ~/src
cd ~/src
sudo apt install python-is-python3
df
Зависимость FreeType в Ubuntu 16.04 LTS
В Ubuntu 18.04 LTS, который устанавливает FreeType 2.8.1, пропустите этот абзац и продолжите установку Mapnik .
Mapnik зависит от FreeType для поддержки шрифтов TrueType, Type 1 и OpenType. В Ubuntu 16.04 LTS установлена версия FreeType 2.6.1 , в которой включено затемнение основы, что делает шрифты Noto CJK более жирными и чрезмерно подчеркнутыми. Установка более новой версии FreeType из отдельного PPA, переопределяющая версию по умолчанию, включенную в Ubuntu 16.04 LTS, решает эту проблему:
echo "Old freetype version:" dpkg -l|grep freetype6 sudo add-apt-repository -y ppa:no1wantdthisname/ppa sudo apt-get update sudo apt-get install -y libfreetype6 libfreetype6-dev
Проверьте обновленную версию freetype:
echo "Updated freetype version:" dpkg -l|grep freetype6
Если вам необходимо понизить версию FreeType до стандартной в репозитории Ubuntu 16.04, просто очистите PPA с помощью ppa-purge:
sudo apt-get install ppa-purge && sudo ppa-purge ppa:no1wantdthisname/ppa
Мы расскажем о некоторых альтернативных процедурах установки Mapnik (с учетом возможности запуска обновленной версии Ubuntu).
В версиях Ubuntu старше 18.04 LTS версия Mapnik по умолчанию старше минимально необходимой, которая составляет 3.0.19. В любом случае, специальный PPA, созданный talaj, предлагает упакованную версию 3.0.19 Mapnik для Ubuntu 16.04 LTS Xenial.
sudo add-apt-repository -y ppa:talaj/osm-mapnik sudo apt-get update
Ubuntu 18.04 LTS предоставляет Mapnik 3.0.19 и не требует специального PPA.
Установить библиотеку Mapnik из пакета
Следующая команда устанавливает Mapnik из стандартного репозитория Ubuntu:
sudo apt-get install -y git autoconf libtool libxml2-dev libbz2-dev \ libgeos-dev libgeos++-dev libproj-dev gdal-bin libgdal-dev g++ \ libmapnik-dev mapnik-utils python3-mapnik
В Ubuntu 18.04 LTS вы можете использовать python-mapnik вместо python3-mapnik .
Launchpad сообщает версию Mapnik , установленную из пакета, в зависимости от операционной системы; чем новее ОС, тем выше версия Mapnik.
GitHub предоставляет упорядоченный список доступных версий для:
Версия 3.0.19 — минимальная рекомендуемая на данный момент.При использовании вышеупомянутого PPA эта версия будет установлена вместо версии по умолчанию, доступной в Ubuntu.
После установки Mapnik из пакета перейдите к проверке установки Mapnik.
Установить Mapnik из исходников
Чтобы установить Mapnik из исходников, перейдите на страницу установки Mapnik для Ubuntu .
Сначала создайте каталог для загрузки исходников:
mkdir -p ~/src ; cd ~/src
Примечание: если вы получили следующую ошибку:
++ compiler does not support C++14 standard (-std=c++14), which is required. Please upgrade your compiler
используйте этот эксплорт вместо того, который включен в связанную документацию:
export CXX="clang++-10" && export CC="clang-10"
Последнюю версию и список изменений смотрите в разделе «Выпуски Mapnik» .
Удалите все остальные старые пакеты Mapnik:
sudo apt-get purge -y libmapnik* mapnik-* sudo apt-get purge -y python-mapnik sudo apt-get purge -y python3-mapnik sudo add-apt-repository --remove -y ppa:mapnik/nightly-trunk sudo add-apt-repository --remove -y ppa:talaj/osm-mapnik
Установка предварительных условий:
sudo apt-get install -y libxml2-dev libfreetype6-dev \ libjpeg-dev libpng-dev libproj-dev libtiff-dev \ libcairo2 libcairo2-dev python-cairo python-cairo-dev \ libgdal-dev git sudo apt-get install -y build-essential python-dev libbz2-dev libicu-dev sudo apt-get install -y python zlib1g-dev clang make pkg-config curl # you might have to update your outdated clang sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test sudo apt-get update -y sudo apt-get install -y gcc-6 g++-6 clang-3.8 export CXX="clang++-10" && export CC="clang-10"
Проверьте clang –version и g++-6 –version перед обновлением компилятора. Как уже упоминалось, установка gcc-6 и clang-3.8 должна выполняться только с Ubuntu 16.04, который по умолчанию поставляется с более старыми версиями (не с Ubuntu 18.04).
Нам необходимо установить Boost либо из пакета, либо из исходного кода.
Установить Boost из пакета
Не устанавливайте boost из пакета, если вы планируете компилировать mapnik с обновленным компилятором. Вместо этого скомпилируйте boost с тем же обновленным компилятором.
sudo apt-get install -y libboost-all-dev
Установить последнюю версию Boost из исходного кода
Удалить предыдущую установку boost из пакета:
sudo apt-get purge -y libboost-all-dev # remove installation from package
Скачать boost из источника:
cd ~/src wget https://dl.bintray.com/boostorg/release/1.66.0/source/boost_1_66_0.tar.bz2 tar xjf boost_1_66_0.tar.bz2 rm boost_1_66_0.tar.bz2 cd boost_1_66_0
Обратите внимание, что boost и mapnik должны быть скомпилированы одним и тем же компилятором. С Ubuntu 16.04 и gcc-6, g++-6, clang-3.8 вы должны использовать эти команды:
./bootstrap.sh --with-toolset=clang ./b2 stage toolset=clang-3.8 define=_GLIBCXX_USE_CXX11_ABI=0 --with-thread --with-filesystem --with-python --with-regex -sHAVE_ICU=1 -sICU_PATH=/usr/ --with-program_options --with-system link=shared sudo ./b2 install toolset=clang-3.8 define=_GLIBCXX_USE_CXX11_ABI=0 --with-thread --with-filesystem --with-python --with-regex -sHAVE_ICU=1 -sICU_PATH=/usr/ --with-program_options --with-system link=shared -d0 sudo ldconfig && cd ~/
При использовании компилятора по умолчанию в Ubuntu 18.04 или Ubuntu 16.04 процедура компиляции выглядит следующим образом
./bootstrap.sh ./b2 stage toolset=gcc --with-thread --with-filesystem --with-python --with-regex -sHAVE_ICU=1 -sICU_PATH=/usr/ --with-program_options --with-system link=shared sudo ./b2 install toolset=gcc --with-thread --with-filesystem --with-python --with-regex -sHAVE_ICU=1 -sICU_PATH=/usr/ --with-program_options --with-system link=shared -d0 sudo ldconfig && cd ~/
Не пытайтесь компилировать mapnik с помощью обновленного компилятора, если boost установлен из пакета.
Установите HarfBuzz из пакета
HarfBuzz — это движок формирования текста OpenType .
Его можно установить из пакета, но лучше загрузить более обновленную версию исходного кода и скомпилировать ее. Для установки из пакета:
sudo apt-get install -y libharfbuzz-dev
Установите HarfBuzz из исходного кода
Проверьте последнюю версию здесь . Этот пример grubs harfbuzz-1.7.6:
cd ~/src wget https://www.freedesktop.org/software/harfbuzz/release/harfbuzz-1.7.6.tar.bz2 tar xjf harfbuzz-1.7.6.tar.bz2 rm harfbuzz-1.7.6.tar.bz2 cd harfbuzz-1.7.6 ./configure && make && sudo make install sudo ldconfig && cd ~/
Собрать библиотеку Mapnik из исходников
На момент написания статьи Mapnik 3.0 является текущей стабильной версией и должна использоваться. Ветка для последней версии Mapnik из серии 3.0.x — v3.0.x.
Загрузите последние исходники Mapnik:
cd ~/src
git clone -b v3.0.x https://github.com/mapnik/mapnik
cd mapnik
git submodule update --init
source bootstrap.sh
./configure CUSTOM_CXXFLAGS="-D_GLIBCXX_USE_CXX11_ABI=0" CXX=${CXX} CC=${CC}
make
После успешной компиляции Mapnik используйте следующую команду для его установки в вашу систему:
make test sudo make install cd ~/
Связывания Python не включены по умолчанию. Вам нужно будет добавить их отдельно.
- Установка предварительных условий:
sudo apt-get install -y python-setuptools python3-setuptools
Только в случае, если вы установили boost из пакета, вам также необходимо:
sudo apt-get install -y libboost-python-dev
Не выполняйте указанную выше установку libboost-python-dev с boost , скомпилированным из исходного кода.
Установите переменные BOOST , если вы установили boost из исходников:
export BOOST_PYTHON_LIB=boost_python export BOOST_THREAD_LIB=boost_thread export BOOST_SYSTEM_LIB=boost_system
- Загрузите и скомпилируйте python-mapnik . Мы по-прежнему используем ветку v3.0.x:
cd ~/src git clone -b v3.0.x https://github.com/mapnik/python-mapnik.git cd python-mapnik sudo -E python3 setup.py develop sudo -E python3 setup.py install
Примечание: Mapnik и mapnik-config (часть Mapnik) должны быть установлены перед этой настройкой.
Затем вы можете убедиться, что Mapnik установлен правильно .
Убедитесь, что Mapnik был правильно установлен
Сообщить номер версии Mapnik и указать путь к каталогу входных плагинов
mapnik-config -v mapnik-config --input-plugins
Убедитесь, что Python установлен . Также убедитесь, что pip установлен .
Затем проверьте с помощью Python 3:
python3 -c "import mapnik;print(mapnik.__file__)"
Если используется Python 2.7 (не Ubuntu 20.04 LTS), используйте эту команду для проверки:
python -c "import mapnik;print mapnik.__file__"
Он должен вернуть путь к привязкам python (например, /usr/lib/python2.7/dist-packages/mapnik/init.pyc). Если python отвечает без ошибок, то библиотека Mapnik была найдена Python.
Настроить брандмауэр
Если вы готовите удаленную виртуальную машину, настройте брандмауэр так, чтобы разрешить удаленный доступ к локальному порту 80 и локальному порту 443.
Если вы используете облачную виртуальную машину, сама виртуальная машина также должна быть настроена на открытие этого порта.
Установить HTTP-сервер Apache
Apache бесплатный HTTP-сервер с открытым исходным кодом — один из самых популярных веб-серверов в мире. Он хорошо документирован и широко использовался на протяжении большей части истории Интернета, что делает его отличным выбором по умолчанию для хостинга веб-сайта .
Чтобы установить Apache:
sudo apt-get install -y apache2 apache2-dev
Службу Apache можно запустить с помощью
sudo service apache2 start
Ошибка «Не удалось включить APR_TCP_DEFER_ACCEPT» в Ubuntu на Windows возникает из-за этой опции сокета, которая изначально не поддерживается Windows. Чтобы ее обойти, отредактируйте /etc/apache2/apache2.conf с помощью
sudo nano /etc/apache2/apache2.conf
и добавьте следующую строку в конец файла:
AcceptFilter http none
Чтобы проверить, установлен ли Apache, направьте ваш браузер на IP-адрес вашего сервера (например, http://localhost). Страница должна отображать домашнюю страницу Apache по умолчанию. Также эта команда позволяет проверить корректность работы:
curl localhost| grep 'It works!'
Настройки Apache, принятые серверами тайлов OpenStreetMap, можно найти в соответствующей конфигурации Chef .
Как узнать IP-адрес вашего сервера
Вы можете выполнить следующую команду, чтобы узнать публичный IP-адрес вашего сервера:
wget https://ipinfo.io/ip -qO -
Вы можете протестировать Apache, открыв его через браузер по адресу http://your-server-ip
Установить Mod_tile из пакета
Mod_tile — это модуль Apache для эффективного рендеринга и обслуживания фрагментов карты для www.openstreetmap.org с использованием Mapnik.
Mod_tile/render для Ubuntu 18.04 и Ubuntu 20.04
В Ubuntu 18.04 (bionic) и Ubuntu 20.04 (focal) mod_tile/renderd можно установить, добавив OpenStreetMap PPA , поддерживаемый командой «Администраторы OpenStreetMap»:
sudo add-apt-repository -y ppa:osmadmins/ppa sudo apt-get update
Также подходит вышеупомянутый таладж PPA .
После добавления PPA mod_tile/renderd можно установить из пакета с помощью следующей команды:
sudo apt-get install -y libapache2-mod-tile # this includes both mod-tile and renderd
Mod_tile/renderd для Ubuntu 21.04
В Ubuntu 21.04 (hirsute) пакет доступен и может быть установлен с помощью
sudo apt-get install -y libapache2-mod-tile renderd
Установить Mod_tile из исходников
В качестве альтернативы установке Mod_tile через PPA, мы можем скомпилировать его из репозитория GitHub.
Чтобы удалить ранее установленный PPA и связанные с ним пакеты:
sudo apt-get purge -y libapache2-mod-tile sudo apt -y autoremove sudo add-apt-repository -y --remove ppa:osmadmins/ppa sudo add-apt-repository -y --remove ppa:talaj/osm-mapnik
Для компиляции Mod_tile:
sudo apt-get install -y autoconf autogen mkdir -p ~/src ; cd ~/src git clone https://github.com/openstreetmap/mod_tile.git # Alternative repository: # git clone -b switch2osm git://github.com/SomeoneElseOSM/mod_tile.git cd mod_tile ./autogen.sh && ./configure && make && sudo make install && sudo make install-mod_tile && sudo ldconfig cd ~/
Проверьте также https://github.com/openstreetmap/mod_tile/blob/master/docs/build/building_on_ubuntu_20_04.md
Процесс рендеринга, реализуемый mod_tile и renderd, подробно описан в соответствующем файле readme на GitHub .
Установка Python
Проверьте, установлен ли Python :
sudo apt-get install -y python3 python3-distutils # Verify Python installation: python -V python3 -V
Установите Yaml и диспетчер пакетов для Python
Это необходимо для запуска скриптов/индексов OpenStreetMap-Carto.
sudo apt-get install -y python-yaml pip -V # to verify whether pip is already installed sudo apt-get install -y python3-pip python3 -m pip install --upgrade pip
Установите утилиты Mapnik
Пакет Mapnik Utilities включает shapeindex.
sudo apt-get install -y mapnik-utils
Установить openstreetmap-carto
mkdir -p ~/src cd ~/src git clone https://github.com/gravitystorm/openstreetmap-carto.git cd openstreetmap-carto
Для получения дополнительной информации прочтите примечания по установке .
Установите шрифты, необходимые для openstreetmap-carto
В настоящее время используются шрифты Noto.
Чтобы установить их (кроме Noto Emoji Regular и Noto Sans Arabic UI Regular/Bold):
sudo apt-get install -y fonts-noto-cjk fonts-noto-hinted fonts-noto-unhinted fonts-hanazono ttf-unifont
Установка шрифтов Noto (при наличии следует использовать шрифты с подсказками):
cd ~/src git clone https://github.com/googlefonts/noto-emoji.git git clone https://github.com/googlefonts/noto-fonts.git sudo cp noto-emoji/fonts/NotoColorEmoji.ttf /usr/share/fonts/truetype/noto sudo cp noto-emoji/fonts/NotoEmoji-Regular.ttf /usr/share/fonts/truetype/noto sudo cp noto-fonts/hinted/ttf/NotoSansArabicUI/NotoSansArabicUI-Regular.ttf /usr/share/fonts/truetype/noto sudo cp noto-fonts/hinted/ttf/NotoNaskhArabicUI/NotoNaskhArabicUI-Regular.ttf /usr/share/fonts/truetype/noto sudo cp noto-fonts/hinted/ttf/NotoSansArabicUI/NotoSansArabicUI-Bold.ttf /usr/share/fonts/truetype/noto sudo cp noto-fonts/hinted/ttf/NotoNaskhArabicUI/NotoNaskhArabicUI-Bold.ttf /usr/share/fonts/truetype/noto sudo cp noto-fonts/hinted/ttf/NotoSansAdlam/NotoSansAdlam-Regular.ttf /usr/share/fonts/truetype/noto sudo cp noto-fonts/hinted/ttf/NotoSansAdlamUnjoined/NotoSansAdlamUnjoined-Regular.ttf /usr/share/fonts/truetype/noto sudo cp noto-fonts/hinted/ttf/NotoSansChakma/NotoSansChakma-Regular.ttf /usr/share/fonts/truetype/noto sudo cp noto-fonts/hinted/ttf/NotoSansOsage/NotoSansOsage-Regular.ttf /usr/share/fonts/truetype/noto sudo cp noto-fonts/hinted/ttf/NotoSansSinhalaUI/NotoSansSinhalaUI-Regular.ttf /usr/share/fonts/truetype/noto sudo cp noto-fonts/hinted/ttf/NotoSansArabicUI/NotoSansArabicUI-Regular.ttf /usr/share/fonts/truetype/noto sudo cp noto-fonts/hinted/ttf/NotoSansCherokee/NotoSansCherokee-Bold.ttf /usr/share/fonts/truetype/noto sudo cp noto-fonts/hinted/ttf/NotoSansSinhalaUI/NotoSansSinhalaUI-Bold.ttf /usr/share/fonts/truetype/noto sudo cp noto-fonts/hinted/ttf/NotoSansSymbols/NotoSansSymbols-Bold.ttf /usr/share/fonts/truetype/noto sudo cp noto-fonts/hinted/ttf/NotoSansArabicUI/NotoSansArabicUI-Bold.ttf /usr/share/fonts/truetype/noto sudo cp noto-fonts/unhinted/ttf/NotoSansSymbols2/NotoSansSymbols2-Regular.ttf /usr/share/fonts/truetype/noto sudo cp noto-fonts/hinted/ttf/NotoSansBalinese/NotoSansBalinese-Regular.ttf /usr/share/fonts/truetype/noto sudo cp noto-fonts/archive/hinted/NotoSansSyriac/NotoSansSyriac-Regular.ttf /usr/share/fonts/truetype/noto mkdir NotoSansSyriacEastern-unhinted cd NotoSansSyriacEastern-unhinted wget https://noto-website-2.storage.googleapis.com/pkgs/NotoSansSyriacEastern-unhinted.zip unzip NotoSansSyriacEastern-unhinted.zip sudo cp NotoSansSyriacEastern-Regular.ttf /usr/share/fonts/truetype/noto cd .. sudo apt install fontconfig
В конце:
sudo fc-cache -fv fc-list fc-list | grep Emoji
DejaVu Sans используется как необязательный резервный шрифт для систем без Noto Sans. Если установлены все шрифты Noto, его никогда не следует использовать.
sudo apt-get install -y fonts-dejavu-core
Дополнительную информацию смотрите в примечаниях к шрифтам .
Старый унифонт Средний шрифт
Шрифт unifont Medium (нижняя метка), который был включен в предыдущие версии ОС, теперь больше не доступен и заменен на Unifont Medium (верхняя). Предупреждения, связанные с недоступностью unifont Medium, не актуальны и являются следствием старого решения разработчиков OpenStreetMap поддерживать как старый шрифт Ubuntu 12.04, так и более новую версию (в верхнем регистре).
Один из способов избежать предупреждения — удалить ссылку на «unifont Medium» в openstreetmap-carto/style.xml .
Другой альтернативный способ удаления предупреждения о строчных буквах unifont Medium — установка старого шрифта «unifont Medium» (используется в Ubuntu 12.10):
mkdir -p ~/src ; cd ~/src mkdir OldUnifont cd OldUnifont wget http://http.debian.net/debian/pool/main/u/unifont/unifont_5.1.20080914.orig.tar.gz tar xvfz unifont_5.1.20080914.orig.tar.gz unifont-5.1.20080914/font/precompiled/unifont.ttf sudo cp unifont-5.1.20080914/font/precompiled/unifont.ttf /usr/share/fonts/truetype/unifont/OldUnifont.ttf sudo fc-cache -fv fc-list | grep -i unifont # both uppercase and lowercase fonts will be listed
Обратите внимание, что описанная выше операция установки бесполезна, она просто удаляет предупреждение.
Установите Node.js
Установите Node.js с Ubuntu 20.04 LTS:
# Check installations: node -v nodejs -v npm -v # If components needs to be installed, run the following: sudo apt install -y nodejs npm
Перейдите на страницу проверки версий Node.js.
Дополнительные примечания по Node.js: другие способы его установки:
- NodeSource Node.js Двоичные дистрибутивы . Проверьте соответствующие инструкции по установке .
- Стандартный режим с помощью Ubuntu Advanced Packaging Tool (APT)
- Инструменты управления версиями, такие как:
Список [https://ircama.github.io/osm-carto-tutorials/nodejs-commands|полезных команд]] для управления Node.js доступен на специальной странице.
Указанная выше версия Node.js также поддерживает установку TileMill и Carto.
Версия дистрибутива из менеджера пакетов APT
Последние версии Ubuntu поставляются с Node.js ( пакет nodejs ) и npm ( пакет npm ) в репозиториях по умолчанию. В зависимости от того, какую версию Ubuntu вы используете, эти пакеты могут содержать устаревшие релизы; тот, что идет с Ubuntu 16.04, не будет последним, но он должен быть стабильным и достаточным для запуска Kosmtik и Carto. Вместо этого TileMill требуется nodejs-legacy (или старая версия node, установленная через инструмент управления версиями Node.js).
Для carto мы установим nodejs :
sudo apt-get install -y nodejs npm node -v 2>/dev/null || sudo ln -fs /usr/bin/nodejs /usr/local/bin/node nodejs -v node -v npm -v
Установите Node.js с помощью инструмента управления версиями
В качестве альтернативы предлагается использовать инструмент управления версиями Node.js, который упрощает интерактивное управление различными версиями Node.js и позволяет выполнять обновление до последней версии. Мы будем использовать n .
Установить n :
mkdir -p ~/src ; cd ~/src git clone https://github.com/tj/n.git cd n sudo make install # To uninstall: sudo make uninstall cd ..
Некоторые программы (например, Kosmtik и carto ) принимают последнюю версию узла LTS ( sudo n lts), другие (например, Tilemill ) работают с v6.14.1 ( sudo n 6.14.1).
Для carto мы установим последнюю версию LTS:
sudo n lts
Проверьте версии Node.js
Чтобы получить номера установленных версий:
node -v npm -v
Установите carto и создайте XML-таблицу стилей Mapnik
Carto — это компилятор таблиц стилей, преобразующий проекты CartoCSS в таблицы стилей Mapnik XML.
Согласно текущей документации openstreetmap-carto , минимальная версия carto ( CartoCSS ), которую можно установить, — 0.18 . Поскольку carto компилирует таблицы стилей openstreetmap-carto, рекомендуется сохранить ту же версию, что и в документации openstreetmap-carto (вместо простой установки последней версии carto ).
Последнюю версию carto 1.2.0 можно установить с помощью
sudo npm install -g carto
Это работает с Ubuntu 20.04 LTS.
До Ubuntu 18.04 LTS эта версия выдает предупреждения типа «Стили не соответствуют селектору слоев .text-low-zoom» .
Чтобы избежать этих предупреждений, установите версию 0 carto :
sudo npm install -g carto@0
На момент написания статьи это должна быть версия 0.18.2 .
Если установка не удалась, возможно, это связано с несовместимостью с npm/Node.js. Чтобы исправить это, попробуйте понизить версию Node.js.
Чтобы проверить установленную версию:
carto -v
При запуске carto вам необходимо указать версию API Mapnik через -a опцию. Для принятия версии документация openstreetmap-carto предлагает некоторые рекомендации.
Чтобы вывести список всех известных версий API в установленном программном обеспечении узла , выполните следующую команду:
npm install mapnik-reference
node -e "console.log(require('mapnik-reference'))"
Спецификации для каждой версии API также задокументированы в репозитории carto .
Вам следует использовать версию API, наиболее близкую к установленной у вас версии Mapnik (уточните у mapnik-config -v).
Протестируйте carto и создайте style.xml из стиля openstreetmap-carto :
cd ~/src cd openstreetmap-carto carto -a "3.0.22" project.mml > style.xml ls -l style.xml
При выборе соответствующей версии API вы не должны получить никаких соответствующих предупреждающих сообщений.
Команда sudo apt-get install -y node-carto может установить старую версию Carto , несовместимую с Openstreetmap Carto, и ее следует избегать.
Установите PostgreSQL и PostGIS
PostgreSQL — это реляционная база данных, а PostGIS — ее пространственный расширитель, позволяющий хранить в ней географические объекты, такие как картографические данные; он выполняет функцию, схожую с SDE от ESRI или пространственным расширением Oracle. PostgreSQL + PostGIS используются для широкого спектра функций, таких как рендеринг карт, геокодирование и анализ.
В настоящее время протестированными версиями OpenstreetMap Carto являются PostgreSQL 10 и PostGIS 2.4:
Также должна подойти более старая или более новая версия PostgreSQL .
В Ubuntu имеются предварительно упакованные версии postgis и postgresql, поэтому их можно просто установить через менеджер пакетов Ubuntu.
sudo apt-get update sudo apt-get install -y postgresql postgis
Дополнительные компоненты:
sudo apt-get install -y postgresql-contrib postgresql-12-postgis-3 postgresql-12-postgis-3-scripts
Вам необходимо запустить базу данных:
sudo service postgresql start
Примечание: используемый порт PostgreSQL — 5432 (по умолчанию).
Создайте экземпляр PostGIS
Теперь вам нужно создать базу данных PostGIS. По умолчанию различные программы, включая openstreetmap-carto (ref. project.mml), предполагают, что база данных называется gis . Вам нужно создать базу данных PostgreSQL и настроить на ней расширение PostGIS.
Схема кодировки символов, которая будет использоваться в базе данных, — UTF8 , а принятый параметр сортировки — en_GB.utf8 . ( U&«…«Экранированный синтаксис Unicode, используемый в project.mml, должен работать только в том случае, если кодировкой сервера является UTF8 . Это также соответствует тому, что указано в коде конфигурации PostgreSQL Chef .)
sudo -u postgres createuser -s $USER createdb gis --encoding="UTF8" --lc-collate="en_GB.UTF-8" --lc-ctype="en_GB.UTF-8" --template=template0 psql -d gis -c 'CREATE EXTENSION postgis; CREATE EXTENSION hstore;'
Примечание: ERROR: invalid locale name: «en_GB.UTF-8» означает, что локаль en_GB.UTF-8 не установлена. После установки локали необходимо перезапустить базу данных, чтобы загрузить локаль.
Перейти к следующему шагу.
Если на другом хосте:
Установите переменные среды
export PGHOST=localhost export PGPORT=5432 export PGUSER=postgres export PGPASSWORD=postgres_007%
HOSTNAME=localhost # set it to the actual ip address or host name createdb gis --host="$HOSTNAME" --encoding="UTF8" --lc-collate="en_GB.UTF-8" --lc-ctype="en_GB.UTF-8" --template=template0
Если вы получили следующую ошибку:
ERROR: invalid locale name: «en_GB.utf8»
то вам нужно добавить локаль «en_GB.utf8» с помощью следующей команды:
sudo dpkg-reconfigure locales
И выберите «en_GB.UTF-8 UTF-8» на первом экране («Locales to be generated»). После этого будет предложено перезапустить базу данных:
sudo service postgresql restart
Если вы получили следующую ошибку:
ERROR: new collation (en_GB.utf8) is incompatible with the collation of the template database (en_US.UTF-8)
HINT: Use the same collation as in the template database, or use template0 as template.
вам нужно использовать template0 для gis:
psql -U postgres -h $HOSTNAME -c "CREATE DATABASE gis ENCODING 'UTF-8' LC_COLLATE 'en_GB.utf8' LC_CTYPE 'en_GB.utf8' TEMPLATE template0" # alternative command: createdb -E UTF8 -l en_GB.UTF8 -O postgres -T template0 gis
Если вы получили следующую ошибку:
ERROR: new encoding (UTF8) is incompatible with the encoding of the template database (SQL_ASCII)
HINT: Use the same encoding as in the template database, or use template0 as template.
(ошибка, которая обычно возникает в Ubuntu на Windows с WSL ), затем добавьте также TEMPLATE template0; например, используйте следующую команду:
psql -U postgres -h $HOSTNAME -c "CREATE DATABASE gis ENCODING 'UTF-8' LC_COLLATE 'en_GB.utf8' LC_CTYPE 'en_GB.utf8' TEMPLATE template0" # alternative command: createdb -E UTF8 -l en_GB.utf8 -O postgres -T template0 gis
Установите флажок, чтобы создать базу данных в разделе диска, где достаточно свободного места. Если вам необходимо использовать табличное пространство, отличное от используемого по умолчанию, выполните следующие команды вместо предыдущих (пример: табличное пространство имеет местоположение /tmp/db):
sudo mkdir /mnt/db # Suppose this is the tablespace location sudo chown postgres:postgres /mnt/db psql -U postgres -h $HOSTNAME -c "CREATE TABLESPACE gists LOCATION '/mnt/db'" psql -U postgres -h $HOSTNAME -c "ALTER DATABASE gis SET TABLESPACE gists"
Создайте расширения postgis и hstore :
psql -U postgres -h $HOSTNAME -c "\connect gis" psql -U postgres -h $HOSTNAME -d gis -c "CREATE EXTENSION postgis" psql -U postgres -h $HOSTNAME -d gis -c "CREATE EXTENSION hstore"
Если вы получили следующую ошибку
ERROR: could not open extension control file »/usr/share/postgresql/9.3/extension/postgis.control»: No such file or directory
то вы, возможно, устанавливаете PostgreSQL 9.3 (вместо 9.5), для чего вам также понадобится:
sudo apt-get install postgis postgresql-9.3-postgis-scripts
Установите его и повторите команды создания расширения. Обратите внимание, что PostgreSQL 9.3 в настоящее время не поддерживается openstreetmap-carto.
Добавьте пользователя и предоставьте доступ к базе данных gis
Для того, чтобы приложение могло получить доступ к базе данных gis , необходим пользователь DB с тем же именем, что и у вашего пользователя UNIX. Предположим, что ваш пользователь UNIX — tileserver .
psql -d gis -c "create user tileserver;grant all privileges on database gis to postgres;" psql -d gis -c 'create user "www-data";grant all privileges on database gis to "www-data";' psql -d gis -c 'ALTER TABLE geometry_columns OWNER TO postgres;' psql -d gis -c 'ALTER TABLE spatial_ref_sys OWNER TO postgres;'
Включение удаленного доступа к PostgreSQL
Если вы находитесь на другом хосте, для удаленного доступа к PostgreSQL вам необходимо отредактировать pg_hba.conf :
sudo nano /etc/postgresql/*/main/pg_hba.conf
и добавьте следующую строку:
host all all <your IP set>/<your netmask> md5
host all all 0.0.0.0/0 md5— это правило контроля доступа, которое позволяет любому человеку входить в систему с любого адреса, указав действительный пароль (ключевое слово md5).
Затем отредактируйте postgresql.conf :
sudo vi /etc/postgresql/*/main/postgresql.conf
и установить listen_addresses = '*'
Наконец, необходимо перезапустить БД:
sudo /etc/init.d/postgresql restart
Проверьте, доступна ли база данных gis . Чтобы вывести список всех баз данных, определенных в PostgreSQL, выполните следующую команду:
psql -U postgres -h $HOSTNAME -c "\l+"
Полученный отчет должен включать базу данных ГИС , как показано в следующей таблице:
| Name | Owner | Encoding | Collate | Ctype | Access privileges |
| gis | postgres | UTF8 | en_US.utf8 | en_US.utf8 | =Tc/postgres |
| postgres=CTc/postgres | |||||
| tileserver=CTc/postgres |
Настройка базы данных
Настройки PostgreSQL по умолчанию не очень хороши для очень больших баз данных, таких как OSM. Правильная настройка может просто удвоить производительность.
Минимальные требования к настройке
Установите пользователя postgres для доверия :
sudo vi /etc/postgresql/*/main/pg_hba.conf # change: local all postgres peer # to: local all postgres trust
После выполнения вышеуказанных изменений перезапустите БД:
sudo service postgresql restart
Запустите tune-postgis.sh :
export POSTGRES_USER=postgres export PG_MAINTENANCE_WORK_MEM=256MB export PG_WORK_MEM=16MB export psql=psql cd ~/src cd openstreetmap-carto bash scripts/tune-postgis.sh
Если postgres не настроен на доверие , возникает следующая ошибка: psql: error: FATAL: Peer authentication failed for user «postgres» при запуске tune-postgis.sh .
Чтобы очистить каталог данных и снова повторить tune-postgis.sh : rm -rf data.
Необязательные дополнительные требования к настройке
В вики PostgreSQL есть страница, посвященная настройке базы данных.
В блоге Пола Нормана есть интересная заметка об оптимизации базы данных, которая используется ниже.
maintenance_work_memНастройки по умолчанию work_memслишком низкие для рендеринга.11: оба параметра следует увеличить для более быстрой загрузки данных и более быстрых запросов (сканирования индекса).
Консервативные настройки для 4 ГБ ВМ — work_mem=32MB и maintenance_work_mem=256MB. На машине с достаточным объемом памяти вы можете установить их как work_mem=256MB и maintenance_work_mem=1GB.
Кроме того, важными настройками являются shared_buffersи write-ahead-log ( wal ). Есть также некоторые другие настройки, которые вы, возможно, захотите изменить специально для импорта.
Чтобы отредактировать файл конфигурации PostgreSQL с помощью редактора nano :
sudo nano /etc/postgresql/*/main/postgresql.conf
а если вы используете PostgreSQL 9.3 (не поддерживается):
sudo nano /etc/postgresql/9.3/main/postgresql.conf
Рекомендуемые минимальные настройки:
shared_buffers = 128MB min_wal_size = 1GB max_wal_size = 2GB work_mem = 32MB # check comments for better tuning maintenance_work_mem = 256MB autovacuum = off fsync = off
Последние два варианта позволяют ускорить импорт: первый отключает автоматическую очистку во время импорта и позволяет запустить очистку в конце; второй приводит к повреждению данных в случае отключения электроэнергии и опасен. Если во время импорта данных произойдет отключение электроэнергии, вам придется удалить данные из базы данных и выполнить повторный импорт, но это быстрее. Просто не забудьте вернуть эти настройки обратно после импорта. fsync не влияет на время запроса после загрузки данных.
Настройки PostgreSQL, принятые OpenStreetMap, можно найти в книге PostgreSQL Chef Cookbook : специальные настройки PostgreSQL для серверов тайлов OpenStreetMap описаны в соответствующей конфигурации Tileserver Chef .
Для установки dev&test на системе с 16 ГБ ОЗУ предлагаются следующие настройки:12:
shared_buffers = 2GB work_mem = 256MB maintenance_work_mem = 1GB wal_level = minimal synchronous_commit = off min_wal_size = 1GB max_wal_size = 2GB checkpoint_segments = 60 checkpoint_timeout = 15min checkpoint_completion_target = 0.9 default_statistics_target = 1000 autovacuum = off fsync = off
default_statistics_target можно даже увеличить до 10000.
При выполнении обновлений базы данных периодически запускайте ANALYZE.
Чтобы остановить и запустить базу данных:
sudo /etc/init.d/postgresql stop sudo /etc/init.d/postgresql start
Вы можете получить ошибку и вам нужно увеличить размер разделяемой памяти. Отредактируйте /etc/sysctl.d/30-postgresql-shm.conf и запустите sudo sysctl -p /etc/sysctl.d/30-postgresql-shm.conf. Параметр типа kernel.shmmax=17179869184и kernel.shmall=4194304 может быть подходящим для размера сегмента 16 ГБ.
Для управления и поддержания конфигурации серверов, работающих под управлением OpenStreetMap, используется инструмент управления конфигурацией Chef .
Для PostgreSQL принята конфигурация postgresql/attributes/default.rb .
Установить Osm2pgsql
Osm2pgsql — это специальное программное обеспечение OpenStreetMap, используемое для загрузки данных OSM в базу данных PostGIS.
По умолчанию пакетные версии Osm2pgsql — 0.88.1-1 на Ubuntu 16.04 LTS и 0.96.0 на Ubuntu 18.04 LTS. Тем не менее, предлагаются более свежие версии, доступные на OpenStreetMap Osmadmins PPA или компиляция программного обеспечения из исходников .
Чтобы установить osm2pgsql:
sudo apt install -y osm2pgsql
Чтобы установить Osm2pgsql из Osmadmins PPA:
sudo add-apt-repository -y ppa:osmadmins/ppa apt-key adv --keyserver keyserver.ubuntu.com --recv A438A16C88C6BE41CB1616B8D57F48750AC4F2CB sudo apt-get update sudo apt-get install -y osm2pgsql
Перейдите в раздел «Получить извлечение данных OpenStreetMap» .
Сгенерировать Osm2pgsql из исходников
Эта альтернативная процедура установки генерирует самый последний исполняемый файл путем компиляции исходных кодов.
Установите необходимые зависимости:
sudo apt-get install -y make cmake g++ libboost-dev libboost-system-dev \ libboost-filesystem-dev libexpat1-dev zlib1g-dev \ libbz2-dev libpq-dev libgeos-dev libgeos++-dev libproj-dev lua5.2 \ liblua5.2-dev
Загрузить osm2pgsql:
mkdir -p ~/src ; cd ~/src git clone git://github.com/openstreetmap/osm2pgsql.git
Подготовка к компиляции, компиляция и установка:
cd osm2pgsql mkdir build cd build cmake -DCMAKE_BUILD_TYPE=Release .. make sudo make install cd
Получите извлечение данных OpenStreetMap
Вам необходимо загрузить соответствующий файл .osm или .pbf, который затем можно загрузить в ранее созданный экземпляр PostGIS через osm2pgsql.
Существует много способов загрузки данных OSM.
Ссылка — Planet OSM .
Вероятно, проще всего получить PBF-файл данных OSM с сайта geofabrikсайта geofabrik .
Кроме того, BBBike.org предоставляет выдержки из более чем 200 городов и регионов по всему миру в различных форматах.
Примеры:
- Картографические данные всей планеты (76G):
wget -c https://planet.openstreetmap.org/pbf/planet-latest.osm.pbf
- Картографические данные Великобритании (847M):
wget -c https://download.geofabrik.de/europe/great-britain-latest.osm.pbf
- Только для Лихтенштейна:
wget https://download.geofabrik.de/europe/liechtenstein-latest.osm.pbf wget https://download.geofabrik.de/europe/liechtenstein-latest.osm.pbf.md5 # Optionally, the following will xheck that the download wasn't corrupted: md5sum -c liechtenstein-latest.osm.pbf.md5
Другой способ загрузки данных — напрямую через браузер. Проверьте эту страницу .
В качестве альтернативы можно использовать JOSM (выберите область для загрузки данных OSM: меню JOSM, Файл, Загрузить из OSM; вкладка Slippy map; перетащите карту правой кнопкой мыши, масштабируйте колесиком мыши или Ctrl + клавиши со стрелками; перетащите рамку левой кнопкой мыши, чтобы выбрать область для загрузки. Также предлагается плагин Continuous Download . Когда нужный регион будет локально доступен, выберите Файл, Сохранить как, <filename>.osm. Дайте ему допустимое имя файла и проверьте также соответствующий каталог, в котором этот файл сохранен.
В любом случае избегайте использования слишком маленьких участков.
OpenStreetMap — это открытые данные . Лицензия OSM — Open Database License.
Загрузить данные в PostGIS
В документации osm2pgsql приведена вся необходимая информация для использования этого инструмента ETL, включая соответствующие параметры командной строки .
osm2pgsql использует overcommit, как и многие научные приложения и приложения для работы с большими данными, что требует корректировки настроек ядра:
sudo sysctl -w vm.overcommit_memory=1
Чтобы загрузить данные из файла .osm или .pbf в PostGIS, выполните следующую команду:
cd ~/src
cd openstreetmap-carto
export OSM2PGSQL_CACHE=${OSM2PGSQL_CACHE:-512}
export OSM2PGSQL_NUMPROC=${OSM2PGSQL_NUMPROC:-1}
export OSM2PGSQL_DATAFILE=${OSM2PGSQL_DATAFILE:-data.osm.pbf}
osm2pgsql \
--cache $OSM2PGSQL_CACHE \
--number-processes $OSM2PGSQL_NUMPROC \
--hstore \
--multi-geometry \
--database gis \
--slim \
--drop \
--style openstreetmap-carto.style \
--tag-transform-script openstreetmap-carto.lua \
[.osm or .pbf file]
[.osm or .pbf file]: замените это на уже загруженный вами файл .osm или .pbf , например, liechtenstein-latest.osm.pbf .
При наличии доступной памяти установите export OSM2PGSQL_CACHE=2500; для процесса импорта будет выделено 2,5 ГБ памяти.
Опция –create загружает данные в пустую базу данных, а не пытается добавить их в существующую.
Ретранслируем на OSM2PGSQL_NUMPROC, если у вас доступно больше ядер, вы можете настроить его соответствующим образом.
В руководстве osm2pgsql подробно описывается использование и все параметры.
При использовании другого сервера:
cd ~/src cd openstreetmap-carto HOSTNAME=localhost # set it to the actual ip address or host name osm2pgsql -s -C 300 -c -G --hstore --style openstreetmap-carto.style --tag-transform-script openstreetmap-carto.lua -d gis -H $HOSTNAME -U postgres [.osm or .pbf file]
Обратите внимание, что предлагаемый процесс принимает опцию -s( –slim), которая использует временные таблицы, поэтому его выполнение занимает больше места на диске (и очень медленно), при этом используется меньше оперативной памяти. Вы можете добавить –drop опцию с -s( –slim), чтобы также удалить временные таблицы после импорта, в противном случае вы также найдете временные таблицы nodes , ways и rels (эти таблицы изначально были чистыми «вспомогательными» таблицами для систем с малым объемом памяти, но сегодня они широко используются, поскольку они также являются предпосылкой для обновлений).
Если все в порядке, можно переходить к следующему шагу .
Обратите внимание, что используются следующие элементы:
- hstore
- openstreetmap- carto.стиль
- скрипт LUA openstreetmap -carto.lua
- Имя базы данных ГИС
В зависимости от размера входного файла команда osm2pgsql может выполняться очень долго. Интересная страница, связанная с бенчмарками Osm2pgsql, связывает размеры систем hw/sw с соответствующими цифрами для импорта данных OpenStreetMap.
Примечание: если вы получили следующую ошибку:
node_changed_mark failed: ERROR: prepared statement "node_changed_mark" does not exist
выполните следующую команду для вашего оригинального .osm :
sed "s/action='modify' //" < original.osm | > fixedfile.osm
Затем обработайте fixedfile.osm .
Если вы получаете такие ошибки:
Error reading style file line 79 (fields=4) flag 'phstore' is invalid in non-hstore mode Error occurred, cleaning up
или этот:
Postgis Plugin: ERROR: column "tags" does not exist
LINE 8: ...ASE WHEN "natural" IN ('mud') THEN "natural" ELSE tags->'wet...
то вам нужно включить расширение hstore в базу данных с помощью CREATE EXTENSION hstore;и также добавить флаг –hstore в osm2pgsql . Включение расширения hstore и использование его с osm2pgsql исправит эти ошибки.
Создайте папку данных
Для этого шага требуется не менее 18 ГБ HD и соответствующая RAM/swap (лучше 24 ГБ HD). 8 ГБ HD будет недостаточно. При 1 ГБ RAM настройка swap обязательна.
python3 -m pip install psycopg2-binary cd ~/src cd openstreetmap-carto scripts/get-external-data.py
Чтобы очистить процедуру get-external-data.py и перезапустить ее с нуля, удалите каталог данных ( rm -r data).
Настройте подкачку , чтобы предотвратить появление следующего сообщения:
INFO:root:Checking table water_polygons Killed
Способ загрузки шейп-файлов серверами тайлов OpenStreetMap описан в соответствующей конфигурации Chef .
Для получения дополнительной информации прочтите скрипт загрузки .
Создание индексов и предоставление пользователям
Создайте частичные индексы для ускорения запросов, включенных в project.mml , и предоставьте доступ ко всем таблицам ГИС , чтобы избежать ошибок рендеринга при доступе к таблицам с пользователем tileserver .
- Добавьте частичные геометрические индексы, указанные openstreetmap-carto для обеспечения эффективного улучшения запросов:
cd ~/src cd openstreetmap-carto HOSTNAME=localhost # set it to the actual ip address or host name psql -d gis -f indexes.sql
Альтернативный режим:
cd ~/src cd openstreetmap-carto scripts/indexes.py | psql -d gis
При использовании другого хоста:
HOSTNAME=localhost # set it to the actual ip address or host name cd ~/src cd openstreetmap-carto scripts/indexes.py | psql -U postgres -h $HOSTNAME -d gis
Альтернативный режим с другим хостом:
HOSTNAME=localhost # set it to the actual ip address or host name psql -U postgres -h $HOSTNAME -d gis -f indexes.sql
- Создайте пользователя PostgreSQL « tilerserver » (если он еще не существует) и предоставьте права на все таблицы базы данных gis для пользователя « tilerserver » и для всех зарегистрированных пользователей:
psql -d gis <<\eof REVOKE CONNECT ON DATABASE gis FROM PUBLIC; GRANT CONNECT ON DATABASE gis TO "www-data"; GRANT CONNECT ON DATABASE gis TO "tileserver"; eof
Чтобы вывести список всех таблиц, доступных в базе данных ГИС , выполните следующую команду:
psql -d gis -c "\dt+"
или:
psql -U postgres -h $HOSTNAME -d gis -c "\dt+"
База данных должна включать таблицы rels , ways и nodes (созданные в –slim режиме osm2pgsql ) для обеспечения возможности обновлений.
В следующем примере вывода использовался –slim режим osm2pgsql :
| Schema | Name | Type | Owner |
| public | planet_osm_line | table | postgres |
| public | planet_osm_nodes | table | postgres |
| public | planet_osm_point | table | postgres |
| public | planet_osm_polygon | table | postgres |
| public | planet_osm_rels | table | postgres |
| public | planet_osm_roads | table | postgres |
| public | planet_osm_ways | table | postgres |
| public | spatial_ref_sys | table | postgres |
Фактически, таблицы planet_osm_rels , planet_osm_ways , planet_osm_nodes доступны, как описано в разделе Структура базы данных Pgsql .
Более подробную информацию можно найти в модели данных OpenStreetMap на сайте Mapbox.
Для получения дополнительной информации ознакомьтесь с пользовательскими индексами .
Настроить рендер
Далее нам нужно подключить renderd и mod_tile к веб-серверу Apache, чтобы он был готов принимать запросы на тайлы.
Получите каталог плагинов Mapnik:
mapnik-config --input-plugins
Это должен быть /usr/local/lib/mapnik/input , или /usr/lib/mapnik/3.0/input , или другой.
Отредактируйте файл конфигурации renderd с помощью предпочитаемого вами редактора:
sudo vi /usr/local/etc/renderd.conf
Примечание: при установке mod_tile из пакета путь будет /etc/renderd.conf .
sudo vi /etc/renderd.conf
В [mapnik] разделе измените значение параметра plugins_dir так, чтобы оно соответствовало значению, возвращаемому функцией mapnik-config –input-plugins:
Пример (при установке Mapnik 3.0 из пакета):
plugins_dir=/usr/lib/mapnik/3.0/input/
С Mapnik 2.2 из пакета:
plugins_dir=/usr/lib/mapnik/2.2/input/
С Mapnik 3.0 из источников:
plugins_dir=/usr/local/lib/mapnik/input/
В [mapnik] разделе также измените значение следующих параметров:
font_dir=/usr/share/fonts font_dir_recurse=true
В [default] разделе измените значение XML и HOST на следующее.
XML=/home/tileserver/src/openstreetmap-carto/style.xml HOST=localhost
Обратите внимание, что URI должен быть установлен на /osm_tiles/.
Также замените все ;** на ;xxx=** (например, на vi :1,$s/^;\*\* /;xxx=** /g).
В приведенном выше примере мы предполагаем, что ваш домашний каталог — /home/tileserver . Измените его на ваш фактический домашний каталог.
Пример файла:
[renderd] stats_file=/var/run/renderd/renderd.stats ;socketname=/var/run/renderd/renderd.sock num_threads=4 tile_dir=/var/lib/mod_tile [mapnik] plugins_dir=/usr/lib/mapnik/3.0/input/ font_dir=/usr/share/fonts font_dir_recurse=true [default] URI=/osm_tiles/ TILEDIR=/var/lib/mod_tile XML=/home/tileserver/src/openstreetmap-carto/style.xml HOST=localhost TILESIZE=256
Сохраните файл.
Проверьте наличие каталога /var/run/renderd, в противном случае создайте его с помощью sudo mkdir /var/run/renderd/renderd.sock.
Проверьте это, чтобы убедиться:
ls -l /home/tileserver/src/openstreetmap-carto/style.xml grep '^;xxx=\*\*' /usr/local/etc/renderd.conf
В случае ошибки проверьте имя пользователя и повторите попытку /usr/local/etc/renderd.conf.
Установите скрипт инициализации renderd , скопировав пример скрипта инициализации, включенный в его пакет.
sudo cp ~/src/mod_tile/debian/renderd.init /etc/init.d/renderd
Примечание: при установке mod_tile из пакета указанная выше команда не нужна.
Предоставьте разрешение на выполнение.
sudo chmod a+x /etc/init.d/renderd
Примечание: при установке mod_tile из пакета указанная выше команда не нужна.
Отредактируйте файл сценария инициализации
sudo vi /etc/init.d/renderd
Измените следующие переменные:
DAEMON=/usr/local/bin/$NAME DAEMON_ARGS="-c /usr/local/etc/renderd.conf" RUNASUSER=tileserver
Важное примечание: при установке mod_tile из пакета сохраните DAEMON=/usr/bin/$NAMEи DAEMON_ARGS=«-c /etc/renderd.conf».
В RUNASUSER=tileserver мы предполагаем, что ваш пользователь — tileserver . Измените его на ваше фактическое имя пользователя.
Сохраните файл.
Создайте следующий файл и установите его владельцем (вашего фактического пользователя).
sudo mkdir -p /var/lib/mod_tile sudo chown tileserver:tileserver /var/lib/mod_tile
Примечание: при установке mod_tile из пакета указанные выше команды не нужны.
Снова измените его на свое фактическое имя пользователя.
Затем запустите службу renderd.
sudo systemctl daemon-reload sudo systemctl start renderd sudo systemctl enable renderd
При использовании WSL renderd необходимо запустить с помощью следующей команды:
sudo service renderd start
Следующий вывод является обычным:
renderd.service is not a native service, redirecting to systemd-sysv-install Executing /lib/systemd/systemd-sysv-install enable renderd
Если systemctl не установлен (например, Ubuntu 14.4), используйте следующие команды:
sudo update-rc.d renderd defaults sudo service renderd start
Настроить Apache
Создайте файл загрузки модуля.
sudo vi /etc/apache2/mods-available/mod_tile.load
Вставьте следующую строку в файл.
LoadModule tile_module /usr/lib/apache2/modules/mod_tile.so
Сохраните его. Создайте символическую ссылку.
sudo ln -s /etc/apache2/mods-available/mod_tile.load /etc/apache2/mods-enabled/
Затем отредактируйте файл виртуального хоста по умолчанию.
test -f /etc/apache2/sites-enabled/000-default.conf || sudo ln -s /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-enabled sudo vi /etc/apache2/sites-enabled/000-default.conf
После строки ниже пропишите следующие строки <VirtualHost *:80>
# Load all the tilesets defined in the configuration file into this virtual host LoadTileConfigFile /usr/local/etc/renderd.conf # Socket where we connect to the rendering daemon ModTileRenderdSocketName /var/run/renderd/renderd.sock # Timeout before giving up for a tile to be rendered ModTileRequestTimeout 3 # Timeout before giving up for a tile to be rendered that is otherwise missing ModTileMissingRequestTimeout 60
Примечание: при установке mod_tile из пакета установите LoadTileConfigFile /etc/renderd.conf.
LoadTileConfigFile /etc/renderd.conf
Сохраните и закройте файл.
Пример:
<VirtualHost *:80>
LoadTileConfigFile /etc/renderd.conf
ModTileRenderdSocketName /var/run/renderd/renderd.sock
ModTileRequestTimeout 3
ModTileMissingRequestTimeout 60
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Перезапустите Apache.
sudo systemctl restart apache2
Если systemctl не установлен (например, Ubuntu 14.4):
sudo service apache2 restart
С помощью WSL перезапустите службу Apache с помощью следующих команд:
sudo service apache2 stop; sudo service apache2 start <code> Проверьте локальный доступ к плиткам: <code> wget --spider http://localhost/osm_tiles/0/0/0.png
У вас должно получиться Remote file exists., если все настроено правильно.
Затем в адресной строке веб-браузера введите
your-server-ip/osm_tiles/0/0/0.png
где вам необходимо изменить your-server-ip на фактический IP-адрес установленного картографического сервера.
Чтобы расширить его, указав публичный IP-адрес вашего сервера, проверьте, например, эту команду (вставьте ее вывод в браузер):
echo "http://`wget http://ipinfo.io/ip -qO -`/osm_tiles/0/0/0.png"
Вы должны увидеть фрагмент карты мира.
Поздравляем! Вы только что успешно создали свой собственный сервер плиток OSM.
Вы можете перейти в OpenLayers , чтобы отобразить скользящую карту.
Предварительный рендеринг тайлов
Предварительная визуализация плиток обычно не нужна (или нежелательна); ее основное применение — обеспечить офлайн-просмотр вместо визуализации плиток на лету. В зависимости от размера БД процедура может занять очень много времени и соответствующих дисковых данных.
Для предварительной визуализации плиток используйте команду render_list . Предварительно визуализированные плитки будут кэшированы в /var/lib/mod_tile каталоге.
Чтобы отобразить все параметры командной строки render_list :
render_list --help
Пример использования:
render_list -a
В зависимости от размера базы данных выполнение этой команды может занять очень много времени.
Следующая команда предварительно визуализирует все плитки от уровня масштабирования 0 до уровня масштабирования 10, используя 1 поток:
render_list -n 1 -z 0 -Z 10 -a
Скрипт командной строки Perl с именем render_list_geo.pl , разработанный alx77, позволяет автоматически предварительно визуализировать плитки в определенной области с использованием географических координат. Соответствующий файл README Github описывает использование и примеры.
Чтобы установить его:
cd ~/src git clone https://github.com/alx77/render_list_geo.pl cd render_list_geo.pl
Пример команды для генерации плиток z11 для Великобритании:
./render_list_geo.pl -n 1 -z 11 -Z 11 -x -9.5 -X 2.72 -y 49.39 -Y 61.26
Для render_list и render_list_geo.pl опция -m позволяет выбирать определенные профили, относящиеся к именованным разделам в renderd.conf . Если эта опция не используется, выбирается [default] раздел renderd.conf .
Устранение неполадок Apache, mod_tile и renderd
Для мониторинга сервера плиток, показывающего линию каждый раз при запросе плитки и одну линию каждый раз после завершения соответствующего рендеринга:
tail -f /var/log/syslog | grep " TILE "
Чтобы очистить кэш всех плиток osm, удалите /var/lib/mod_tile/default (используйте rm -rf, если осмелитесь) и перезапустите демон renderd:
sudo rm -rf /var/lib/mod_tile/default sudo systemctl restart renderd
Не забудьте также очистить кэш браузера.
Если systemctl не установлен (например, Ubuntu 14.4):
sudo service renderd restart
Показать загруженные модули Apache:
apache2ctl -M
Вы должны найтиtile_module (shared)
Показать конфигурацию Apache:
apache2ctl -S
В журнале должны появиться следующие сообщения:
Loading tile config default at /osm_tiles/ for zooms 0 - 20 from tile directory /var/lib/mod_tile with extension .png and mime type image/png
Хвостовой журнал:
tail -f /var/log/apache2/error.log
Большинство проблем с конфигурацией можно обнаружить, проанализировав журнал отладки renderd ; нам нужно остановить демон и запустить renderd в фоновом режиме:
sudo systemctl stop renderd
Если systemctl не установлен (например, Ubuntu 14.4):
sudo service renderd stop
Затем управляйте выводом renderd :
sudo -u tileserver /usr/local/bin/renderd -fc /usr/local/etc/renderd.conf <code> Игнорируйте пять ошибок, связанных со //iniparser: syntax error in /usr/local/etc/renderd.conf// с сылками на закомментированные переменные (например, начинающиеся с ;). Нажмите **Control-C**, чтобы завершить программу. После исправления ошибки демон можно перезапустить с помощью: <code> sudo systemctl start renderd
Если systemctl не установлен (например, Ubuntu 14.4):
sudo service renderd start Проверить наличие /var/run/renderd:
ls -ld /var/run/renderd
Проверьте, что разрешение на доступ есть -rw-r–r– 1 tileserver tileserver. Вы можете временно сделать
sudo chmod 777 /var/run/renderd
Проверьте наличие файла style.xml :
ls -l /home/tileserver/src/openstreetmap-carto/style.xml
Если он отсутствует, смотрите выше, как его создать.
Проверить наличие /var/run/renderd/renderd.sock:
ls -ld /var/run/renderd/renderd.sock Убедитесь, что разрешения на доступ есть srwxrwxrwx 1 tileserver tileserver.
В случае неправильного владельца:
sudo chown 'tileserver' /var/run/renderd sudo chown 'tileserver' /var/run/renderd/renderd.sock sudo service renderd restart
Если каталог отсутствует:
sudo mkdir /var/run/renderd sudo chown 'tileserver' /var/run/renderd sudo service renderd restart
В случае, если renderd завершается с ошибкой сегментации (например, Loading parameterization function forand then Segmentation fault), это может быть связано с несоответствием конфигурации между плагинами Mapnik и конфигурацией renderd; проверьте параметр plugins_dir в /usr/local/etc/renderd.conf .
Ошибка разрешения PostGIS означает, что таблицы БД не были предоставлены пользователю tileserver:
…An error occurred while loading the map layer 'default': Postgis Plugin: ERROR: permission denied for relation…
Чтобы исправить ошибку разрешения, выполните:
sudo ./install-postgis-osm-user.sh gis tileserver
Ошибка, связанная с отсутствием tagsстолбца в журналах renderd , означает, что osm2pgsql не был запущен с этой –hstore опцией.
Если все в конфигурации выглядит нормально, но карта по-прежнему не отображается без какого-либо конкретного сообщения от renderd , попробуйте выполнить перезапуск системы:
sudo shutdown -r now
Если проблема сохраняется, возможно, проблема с пользователем UNIX. Попробуйте отладку снова, установив эти переменные:
export PGHOST=localhost export PGPORT=5432 export PGUSER=postgres export PGPASSWORD=postgres_007%
В исключительном случае следующие команды позволяют полностью удалить Apache, mod_tile и renderd и переустановить службу:
sudo rm -r ~/src/mod_tile/ sudo apt-get purge apache2 apache2-dev sudo rm -r /etc/apache2/mods-available sudo rm /usr/local/etc/renderd.conf sudo rm /etc/init.d/renderd sudo rm -rf /var/lib/mod_tile sudo rm -rf /usr/lib/apache2 sudo rm -rf /etc/apache2/ sudo rm -rf /var/run/renderd sudo apt-get --reinstall install apache2-bin sudo apt-get install apache2 apache2-dev
Формат имен тайлов сервера тайлов OpenStreetMap
Наименование файлов и формат изображений, используемые mod_tile, описаны в Slippy map tilenames . Похожий формат также используется Google Maps и многими другими поставщиками карт.
TMS и WMS — это другие протоколы для обслуживания карт в виде фрагментов, управляемые различными бэкэндами рендеринга.
Развертывание собственной карты Slippy Map
В терминологии OpenStreetMap мозаичная веб-карта также известна как скользящая карта.
OpenStreetMap не предоставляет «официальную» библиотеку JavaScript, которую вы обязаны использовать. Вместо этого вы можете использовать любую библиотеку, которая соответствует вашим потребностям. Две самые популярные — OpenLayers и Leaflet. Обе с открытым исходным кодом.
Страница Развертывание собственной карты Slippy Map иллюстрирует, как встроить ранее установленный сервер карт в веб-сайт. Упоминается ряд возможных библиотек карт, включая некоторые релевантные ( Leaflet , OpenLayers , Google Maps APIGoogle Maps API ), а также множество альтернатив.
OpenLayers
Чтобы отобразить скользящую карту с помощью OpenLayers, создайте файл с именем ol.html в каталоге /var/www/html.
sudo vi /var/www/html/ol.html
Вставьте следующий HTML-код в файл.
Вы можете настроить долготу, широту и уровень масштабирования в соответствии с вашими потребностями. Проверьте var zoom = 2, center = [0, 0];.
Обратите внимание, что мы используем https для openstreetmap.org .
<!DOCTYPE html>
<html>
<head>
<title>OpenStreetMap with OpenLayers</title>
<link rel="stylesheet" href="https://openlayers.org/en/v4.6.5/css/ol.css" type="text/css">
<script src="https://openlayers.org/en/v4.6.5/build/ol.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
<style>
html,
body,
#map {
height: 100%;
margin: 0;
padding: 0;
}
.ol-custom-overviewmap,
.ol-custom-overviewmap.ol-uncollapsible {
bottom: auto;
left: auto;
right: 0;
top: 85px;
}
.ol-zoom {
top: 3em;
}
.ol-zoom-extent {
top: 20.6em!important;
}
.ol-zoomslider {
top: 7.7em!important;
}
.ol-custom-fullscreen {
bottom: auto;
left: auto;
right: 0;
top: 50px;
}
.ol-custom-mouse-positionXY {
top: auto;
bottom: 4em;
font-family: "Arial";
font-size: 12px;
text-shadow: 0 0 0.5em #FFE, 0 0 0.5em #FFE, 0 0 0.5em #FFE;
}
.ol-custom-mouse-positionHDMS {
top: auto;
bottom: 5em;
font-family: "Arial";
font-size: 12px;
text-shadow: 0 0 0.5em #FFE, 0 0 0.5em #FFE, 0 0 0.5em #FFE;
}
.ol-custom-mouse-position3857 {
top: auto;
bottom: 6em;
font-family: "Arial";
font-size: 12px;
text-shadow: 0 0 0.5em #FFE, 0 0 0.5em #FFE, 0 0 0.5em #FFE;
}
#ZoomElement {
position: absolute;
top: auto;
left: 10px;
bottom: 2.5em;
text-decoration: none;
font-family: "Arial";
font-size: 10pt;
text-shadow: 0 0 0.5em #FFE, 0 0 0.5em #FFE, 0 0 0.5em #FFE;
z-index: 30;
}
#TSLabel {
position: absolute;
top: 21px;
right: 0;
font-family: "Arial";
font-size: 12px;
z-index: 30;
}
#osmLabel {
position: absolute;
top: 21px;
left: 0;
font-family: "Arial";
font-size: 12px;
z-index: 30;
}
#swipe {
position: absolute;
top: 0;
left: -4px;
z-index: 20;
}
</style>
</head>
<body>
<div class="ol-viewport">
<input class="ol-unselectable ol-control" id="swipe" type="range" style="width: 100%">
<div class="ol-unselectable ol-control" id="TSLabel"> Tile Server ►</div>
<div class="ol-unselectable ol-control" id="osmLabel">◄ OpenStreetMap </div>
<a class="ol-unselectable ol-control" id="ZoomElement"></a>
</div>
<div tabindex="0" id="map" class="map"></div>
<script>
var zoom = 2, center = [0, 0];
// Set up the Tile Server layer
var myTileServer = new ol.layer.Tile({
preload: Infinity,
source: new ol.source.OSM({
crossOrigin: null,
url: 'osm_tiles/{z}/{x}/{y}.png'
})
});
// Set up the OSM layer
var openStreetMap = new ol.layer.Tile({
preload: Infinity,
source: new ol.source.OSM({
crossOrigin: null,
url: 'https://{a-c}.tile.openstreetmap.org/{z}/{x}/{y}.png'
})
});
if (window.location.hash !== '') {
var hash = window.location.hash.replace('#', '');
var parts = hash.split(';');
if (parts.length === 3) {
zoom = parseInt(parts[0], 10);
center = [
parseFloat(parts[2]),
parseFloat(parts[1])
];
}
}
// Set up the default view
var myTileView = new ol.View({
center: ol.proj.transform(center, 'EPSG:4326', 'EPSG:3857'),
zoom: zoom
});
// Create the map
var map = new ol.Map({
layers: [myTileServer, openStreetMap],
loadTilesWhileInteracting: true,
target: 'map',
controls: ol.control.defaults().extend([
new ol.control.ScaleLine(),
new ol.control.Zoom(),
new ol.control.ZoomSlider(),
new ol.control.ZoomToExtent(),
new ol.control.FullScreen({
className: 'ol-fullscreen ol-custom-fullscreen'
}),
new ol.control.OverviewMap({
className: 'ol-overviewmap ol-custom-overviewmap'
}),
new ol.control.MousePosition({
className: 'ol-mouse-position ol-custom-mouse-position3857',
coordinateFormat: ol.coordinate.createStringXY(4),
projection: 'EPSG:3857',
undefinedHTML: ' '
}),
new ol.control.MousePosition({
coordinateFormat: function(coord) {
return ol.coordinate.toStringHDMS(coord);
},
projection: 'EPSG:4326',
className: 'ol-mouse-position ol-custom-mouse-positionHDMS',
target: document.getElementById('mouse-position'),
undefinedHTML: ' '
}),
new ol.control.MousePosition({
className: 'ol-mouse-position ol-custom-mouse-positionXY',
coordinateFormat: ol.coordinate.createStringXY(4),
projection: 'EPSG:4326',
undefinedHTML: ' '
}),
]),
view: myTileView
});
map.on("moveend", function() {
var view = map.getView();
var center = ol.proj.transform(view.getCenter(), 'EPSG:3857', 'EPSG:4326');
var zoom = view.getZoom();
var zoomInfo = 'Zoom level = ' + zoom;
document.getElementById('ZoomElement').innerHTML = zoomInfo;
window.location.hash =
view.getZoom() + ';' +
Math.round(center[1]*1000000)/1000000 + ';' +
Math.round(center[0]*1000000)/1000000;
});
var swipe = document.getElementById('swipe');
openStreetMap.on('precompose', function(event) {
var ctx = event.context;
var width = ctx.canvas.width * (swipe.value / 100);
ctx.save();
ctx.beginPath();
ctx.rect(width, 0, ctx.canvas.width - width, ctx.canvas.height);
ctx.clip();
});
openStreetMap.on('postcompose', function(event) {
var ctx = event.context;
ctx.restore();
});
swipe.addEventListener('input', function() {
map.render();
}, false);
</script>
</body>
</html>
Сохраните и закройте файл. Теперь вы можете просмотреть свою скользящую карту, введя следующий URL в браузере.
http://your-server-ip/ol.html
Чтобы расширить его, указав публичный IP-адрес вашего сервера, проверьте, например, эту команду (вставьте ее вывод в браузер):
echo "http://`wget http://ipinfo.io/ip -qO -`/ol.html"
Листовка
Leaflet — это библиотека JavaScript для встраивания карт. Она проще и меньше, чем OpenLayers.
Самый простой пример отображения вашей скользящей карты с помощью Leaflet — создание файла с именем lf.html в каталоге /var/www/html .
sudo vi /var/www/html/lf.html
Вставьте следующий HTML-код в файл. Замените your-server-ip на ваш IP-адрес и настройте долготу, широту и уровень масштабирования в соответствии с вашими потребностями.
<!DOCTYPE html>
<html>
<head>
<title>OpenStreetMap with Leaflet</title>
<link rel="stylesheet" href="http://cdn.leafletjs.com/leaflet-0.6.4/leaflet.css" type="text/css">
<script src="http://cdn.leafletjs.com/leaflet-0.6.4/leaflet.js"></script>
<style>
html,
body,
#map {
height: 100%;
margin: 0;
padding: 0;
}
</style>
</head>
<body>
<div id="map" class="map"></div>
<script>
// Create the map
var map = L.map('map').setView([45, 10], 3);
// Set up the OSM layer
L.tileLayer(
'http://your-server-ip/osm_tiles/{z}/{x}/{y}.png'
).addTo(map);
</script>
</body>
</html>
Сохраните и закройте файл. Теперь вы можете просмотреть свою скользящую карту, введя следующий URL в браузере.
http://your-server-ip/lf.html
Быстрый способ протестировать скользящую карту — воспользоваться онлайн-площадкой для изучения исходного кода, например, этим шаблоном JSFiddle.
В следующем примере Leaflet используется для отображения данных OpenStreetMap.
Плитки по умолчанию можно заменить на плитки вашего сервера, изменив
https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png
к http://your-server-ip/osm_tiles/{z}/{x}/{y}.png.
Чтобы отредактировать образец, нажмите Edit в JSFiddle . Затем на панели Javascript измените строку внутри кавычек, как описано выше. Нажмите Run .
Дополнения и файлы
Упомянутые команды:
- sudo apt update — обновляет список пакетов последней информацией из настроенных репозиториев.
- sudo apt update — устанавливает доступные обновления для вашей текущей версии Ubuntu.
- sudo apt dist-upgrade — выполняет более тщательное обновление, которое более тщательно обрабатывает зависимости пакетов.
- sudo apt autoremove — удаляет из системы неиспользуемые или устаревшие пакеты.
- sudo restart — перезагружает систему, чтобы все изменения вступили в силу.
- sudo apt install update-manager-core — устанавливает основной пакет менеджера обновлений, если он еще не установлен.
- sudo do-release-upgrade — запускает процесс обновления выпуска Ubuntu.











