Хостинг OpenStreetMap самостоятельно

OpenStreetMap (OSM) — это бесплатная карта мира, созданная совместно людьми по всему миру — свободная, открытая и независимая. В то время как Google Maps, как лидер рынка, часто является первым выбором для цифровых карт, OSM опирается на совершенно другой принцип: совместное сообщество, которое собирает, улучшает и делает географические данные доступными бесплатно.


Почему это важно? Потому что карты — это знания, а знания должны быть бесплатными. Для отдельных приложений может быть полезно самостоятельно размещать данные OSM, чтобы разрабатывать индивидуальные картографические решения и сохранять контроль над данными и их представлением. Самостоятельное размещение OSM дает ряд преимуществ:

  • Независимость: Вы не зависите от внешних сервисов и имеете полный контроль над данными карты.
  • Адаптивность: Вы можете настроить стиль карты и отображаемые данные в соответствии со своими потребностями.
  • Защита данных: Все данные хранятся локально. Внешние API не вызываются.

Существует два основных метода отображения карт.:

  • Сетка плитки: Готовые файлы изображений для разных уровней масштабирования. Их легко реализовать, но они менее гибки в настройке стиля карты.
  • Векторные плитки: Содержит географические данные в виде векторов (точек, линий, полигонов), которые визуализируются на стороне клиента. Это позволяет гибко настраивать дизайн карты и обеспечивать четкое отображение на всех уровнях масштабирования. Однако для рендеринга требуется больше вычислительной мощности на клиентском устройстве.

Векторные плитки особенно подходят для самостоятельного размещения, поскольку они предлагают больше возможностей настройки и более эффективны. Для региональных карт с меньшими площадями часто достаточно ~1 ГБ места на жестком диске. Использование SSD-накопителей имеет смысл, поскольку они обеспечивают преимущество в скорости загрузки плиток. Статические векторные плитки не требуют работающего картографического сервера (например, TileServer GL или Mapnik), требуют меньшего обслуживания и создают меньшую нагрузку на сервер — они идеально подходят для небольших проектов с фиксированными разделами карты.

Мой маленький пакет osmhelper облегчает процесс создания и развертывания векторных плиток из .osm.pbfФайлы. Пользовательские ограничивающие рамки позволяют разработчикам извлекать определенные географические области и генерировать соответствующие шаблонные файлы, которые можно загружать непосредственно на сервер. Это значительно упрощает интеграцию данных OSM в веб-проекты. Для использования osmhelper необходима некоторая подготовка. Библиотека основана на таких инструментах, как осмий, мбутил а также плиточник который должен быть установлен.

Установка осмия

osmium — мощный инструмент для обработки данных OSM.

mkdir osmium
cd osmium
wget https://github.com/osmcode/osmium-tool/archive/refs/tags/v1.16.0.tar.gz
tar -xzf v1.16.0.tar.gz
cd osmium-tool-1.16.0
apt-get install libosmium2-dev libprotozero-dev nlohmann-json3-dev libboost-program-options-dev libbz2-dev zlib1g-dev liblz4-dev libexpat1-dev cmake pandoc
mkdir build
cd build
cmake ..
make
make install
cd ..
cd ..
rm -rf ./osmium
exec env -i HOME=$HOME bash -l
osmium --version

Установка mbutil

mbutil — это инструмент на основе Python для работы с MBTiles.

git clone https://github.com/mapbox/mbutil.git
cd mbutil
python setup.py install
cd ..
rm -rf ./mbutil
exec env -i HOME=$HOME bash -l
mb-util --version

Установка плиточника

tilemaker — это инструмент с открытым исходным кодом, который преобразует данные OSM непосредственно в векторные плитки.

apt install build-essential libboost-dev libboost-filesystem-dev libboost-program-options-dev libboost-system-dev lua5.1 liblua5.1-0-dev libshp-dev libsqlite3-dev rapidjson-dev
git clone https://github.com/systemed/tilemaker.git
cd tilemaker
make
make install
cd ..
rm -rf ./tilemaker
exec env -i HOME=$HOME bash -l
tilemaker --help

Загрузить скрипт конверсии

mkdir openstreetmap
cd openstreetmap
wget -O ./convert.sh https://raw.githubusercontent.com/vielhuber/osmhelper/refs/heads/master/convert.sh
chmod +x convert.sh

Использование osmhelper

После установки необходимых инструментов можно использовать osmhelper для генерации векторных плиток и подготовки их к размещению.:

./convert.sh \
    --url https://download.geofabrik.de/europe/germany-latest.osm.pbf \
    --lat-min 47.27 \
    --lon-min 8.97 \
    --lat-max 50.57 \
    --lon-max 13.84 \
    --compress

Этот процесс позволяет эффективно создавать адаптированные разделы карты без необходимости использования сервера динамических карт. Интеграция данных OpenStreetMap в ваши собственные проекты может оказаться сложной задачей, особенно когда речь идет о хостинге и развертывании. Поскольку Google Maps обладает монополией на картографические решения, многие разработчики ищут альтернативы. osmhelper упрощает начало работы с вашими собственными данными OpenStreetMap. Это дает вам полный контроль над вашими собственными картами, никаких ограничений API, и вы можете добавлять свои собственные слои данных.

Большинству людей Google Maps известен как стандартное решение для цифровых карт. Но мало кто знает, что OpenStreetMap — это прекрасная альтернатива, не имеющая никаких коммерческих ограничений или скрытых затрат. В то время как Google Maps взимает плату за использование API и собирает данные пользователей, OSM является бесплатным, открытым и поддерживается мировым сообществом. OSM — это Википедия картографического мира: любой желающий может внести свой вклад, добавить дороги, туристические маршруты или POI (точки интереса) и таким образом улучшить бесплатную карту мира.

Назад