Привіт, Гість

dsoft blog

Розгортання серверу OSRM та його використання для оптимізованої навігації з використанням Docker

Published by ds

Якщо ви зацікавлені в розгортанні серверу OSRM (Open Source Routing Machine) та використанні його для створення оптимізованої системи навігації на основі даних OpenStreetMap, то ця стаття стане для вас корисною. Ми розглянемо процес розгортання серверу OSRM за допомогою Docker, а також надамо огляд та відповіді на питання щодо OpenStreetMap та використання OSRM.

Вступ до OSRM та Docker

OSRM - це потужний інструмент для створення власних систем маршрутизації на основі даних OpenStreetMap. За допомогою OSRM можна створювати оптимізовані маршрути для різних видів транспорту, що є незамінним для додатків та сервісів, які вимагають точної та швидкої навігації.

Docker - це платформа, яка дозволяє вам запускати програми у стандартизованих середовищах, відокремлюючи їх від операційної системи хоста. Це забезпечує легше розгортання та управління додатками.

Розгортання серверу OSRM з використанням Docker

Для початку розгортання серверу OSRM ми будемо використовувати Docker, що дозволить нам швидко та зручно налаштувати середовище.

Крок 1: Підготовка даних

Перш ніж розгортати OSRM, потрібно підготувати дані. Завантажте дані OpenStreetMap (OSM) для вашого регіону з https://download.geofabrik.de/.

Крок 2: Створення Docker контейнера

image: osrm/osrm-backend:latest
command: osrm-routed --algorithm mld /data/kazakhstan-latest.osrm
volumes:
  - ./data/dev_osrm:/data
ports:
  - "5000:5000"

Цей Docker контейнер використовує останню версію OSRM та налаштовує сервер з алгоритмом mld (Multi-Level Dijkstra) для обчислення маршрутів на основі даних, які ми підготували.

Крок 3: Запуск серверу

Запустіть Docker контейнер командою:

docker-compose up -d

Тепер сервер OSRM працює та готовий обробляти запити на маршрутизацію.

Підготовка даних для OSRM

Перш ніж ви зможете використовувати OSRM для створення маршрутів, потрібно підготувати дані OpenStreetMap.

Крок 1: Витягнення даних

Geofabric downloads kazahstan map

Витягніть дані з файлу kazakhstan-latest.osm.pbf, посилання на завантаження (http://download.geofabrik.de/asia/kazakhstan-latest.osm.pbf) за допомогою команди:

docker run -t -v "${PWD}/data/dev_osrm:/data" osrm/osrm-backend:latest osrm-extract -p /opt/car.lua /data/kazakhstan-latest.osm.pbf

Крок 2: Партіціонування даних

Виконайте партіціонування даних для оптимізації внутрішньої структури:

docker run -t -v "${PWD}/data/dev_osrm:/data" osrm/osrm-backend:latest osrm-partition /data/kazakhstan-latest.osm.pbf

Крок 3: Налаштування

Призначте налаштування для підготовлених даних:

docker run -t -v "${PWD}/data/dev_osrm:/data" osrm/osrm-backend:latest osrm-customize /data/kazakhstan-latest.osm.pbf
Тепер дані готові для використання на сервері OSRM.

Приклад використання OSRM та детальний розбір коду

Тепер давайте розглянемо приклад використання OSRM та докладніше розберемо наведений вами код.

Приклад запиту до OSRM

Припустимо, ви хочете знайти найкоротший маршрут між двома географічними точками, використовуючи ваш розгорнутий OSRM сервер. Для цього ви можете виконати HTTP запит з використанням бібліотеки requests у Python:

import requests

start_point = (51.5074, -0.1278)  # Координати початкової точки (Лондон)
end_point = (48.8566, 2.3522)     # Координати кінцевої точки (Париж)

url = f"http://localhost:5000/route/v1/driving/{start_point[1]},{start_point[0]};{end_point[1]},{end_point[0]}?steps=true"

response = requests.get(url)
data = response.json()

if "routes" in data:
    route = data["routes"][0]
    distance = route["distance"] / 1000  # Відстань у кілометрах
    duration = route["duration"] / 60    # Тривалість у хвилинах

    print(f"Najkrótsza trasa: {distance:.2f} км, {duration:.2f} хв")
else:
    print("Маршрут не знайдено")

У цьому прикладі ми визначили початкову та кінцеву точки (у форматі (широта, довгота)) та побудували URL для запиту до вашого OSRM серверу. Відповідь на запит буде у форматі GeoJSON, і ми витягнули з неї відстань та тривалість найкоротшого маршруту.

Розбір коду

Тепер розглянемо детально код, який ви надали, для розгортання серверу OSRM та підготовки даних.

image: osrm/osrm-backend:latest
command: osrm-routed --algorithm mld /data/kazakhstan-latest.osrm
volumes:
  - ./data/dev_osrm:/data
ports:
  - "5000:5000"

У цьому коді ми використовуємо Docker для створення контейнера з останньою версією OSRM Backend. Опція command вказує на запуск команди osrm-routed з алгоритмом маршрутизації mld та файлом даних kazakhstan-latest.osrm. Директорія ./data/dev_osrm на вашому локальному комп'ютері мапується на директорію /data всередині контейнера, де зберігаються дані. Параметр ports дозволяє відобразити порт 5000 контейнера на порт 5000 хоста, щоб мати доступ до серверу OSRM.

Огляд OpenStreetMap

OpenStreetMap (OSM) - це проект, який створює та надає вільні географічні дані. Це означає, що всі можуть внести свій внесок у картографію, додавши нові дані про дороги, місця, річки та інші географічні об'єкти. OSM використовується в багатьох додатках, таких як навігаційні системи, картографічні сервіси та багато інших.

Використання OSRM

OSRM використовує дані з OpenStreetMap для обчислення оптимальних маршрутів. Це може бути корисно для розробників додатків з навігацією, логістичних сервісів, транспортних компаній та багатьох інших. Ви можете інтегрувати OSRM у свій додаток або сервіс, щоб надати користувачам найкращі маршрути з урахуванням дорожньої ситуації та інших факторів.

Висновок

У цій статті ми розглянули, як розгорнути сервер OSRM за допомогою Docker та підготувати дані для оптимізованої маршрутизації на основі OpenStreetMap. OSRM є потужним інструментом для створення власних систем навігації та може бути корисним для різноманітних додатків та сервісів. OpenStreetMap надає можливість спільної роботи над картографією та надає дані для створення точних та зручних маршрутів для користувачів. Не соромтеся експериментувати та інтегрувати OSRM у свої проекти для поліпшення навігаційного досвіду ваших користувачів.

Ще немає коментарів.

Авторизуйтесь, щоб залишити коментар.

Про нас

Деякі корисні статті присвячені розробці веб-додатків та технологіям, які допоможуть вам створити продуктивні та захищені веб-додатки.

Ми в соцемережах

  1. GitHub
  2. Twitter