Веб-приложение для анализа регионально-транспортной логистической инфраструктуры. Позволяет получать объекты логистики из OpenStreetMap по заданной области, строить минимальное остовное дерево (MST) связей между ними и рассчитывать ключевые графовые метрики.
- Загрузка данных логистической инфраструктуры (склады, терминалы, порты и др.) из OpenStreetMap в пределах заданного региона
- Построение полной графовой модели (геодезический граф) и выделение минимального остовного дерева для выбранного вида транспорта: автомобильного, авиационного, морского или железнодорожного
- Вычисление основных метрик графа: центральность степени узла, центральность близости, центральность посредничества, а также PageRank
- Генерация интерактивной карты с визуализацией логистической сети и результатами анализа (MST и выбранные метрики)
- Frontend (React + Leaflet) – одностраничное веб-приложение на базе Vite. Предоставляет интерактивную карту для выбора области анализа и отображает результаты (маршрут MST, метрики)
- Backend (FastAPI) – REST API сервис на Python. Обрабатывает запросы: загружает данные OSM, строит граф и MST, вычисляет метрики центральности. В ответ возвращает данные (JSON, HTML-карту) для отображения на фронтенде
- Python 3.9+ (рекомендуется виртуальное окружение)
- Node.js 18+ и npm (для запуска фронтенда)
- Python-библиотеки: FastAPI, OSMnx, NetworkX, GeoPandas, Folium, etc. (см.
requirements.txt) - Node-библиотеки: React, React-Leaflet, Leaflet (устанавливаются через npm)
# (Опционально) Создать и активировать виртуальное окружение
python -m venv env
source env/bin/activate # для Linux/MacOS
env\Scripts\activate # для Windows
# Установить зависимости Python (бэкенд)
pip install -r logistic-backend-python/requirements.txt
# Установить зависимости Node.js (фронтенд)
cd logistic-frontend && npm installВ проекте используется модульное тестирование на базе pytest с мокированием внешних зависимостей. Это обеспечивает стабильность тестов, независимость от файловой системы и сетевых ресурсов, а также высокое покрытие кода.
Установка зависимостей
pip install pytest pytest-cov Запуск тестирования
pytestЗапуск с отчётом о покрытии
pytest --cov=services --cov-report=term-missing # Linux/MacOS
./start.sh
# Windows
start.batПримечание: Скрипты выше запускают сервер FastAPI (порт 8000) и dev-сервер фронтенда Vite (порт 5173) параллельно. На Windows start.bat откроет два процесса. На Linux/MacOS при необходимости запустите бэкенд и фронтенд в отдельных терминалах вручную:
# Запуск бэкенда вручную (FastAPI на http://localhost:8000)
python logistic-backend-python/main.py
# Запуск фронтенда вручную (Dev-сервер на http://localhost:5173)
cd logistic-frontend && npm run devПосле запуска приложения откройте в браузере интерфейс фронтенда (адрес по умолчанию выводится Vite, обычно http://localhost:5173). На странице выбора параметров:
- Выделите прямоугольную область анализа на карте (кликнув две точки, формируя границы) или введите координаты углов области вручную
- Выберите режим транспорта: Авто (автомобильный), Аэро (авиационный), Морской (водный транспорт), Ж/Д (железнодорожный) или Все режимы (построение общего графа)
- Нажмите кнопку анализа – приложение отправит запрос к API (
POST /analyze) для выбранного региона и типа транспорта
После завершения анализа в браузере отобразится интерактивная карта с найденными объектами логистической инфраструктуры и минимальным остовным маршрутом (MST), соединяющим эти объекты. Также будет доступен выбор метрики графа для визуализации: при выборе метрики (степень, близость, посредничество или PageRank) фронтенд отправит запрос к API (GET /metrics) и отобразит на карте результаты расчёта (например, степень каждого узла цветом или размером).
.
├── img/ # Скриншоты интерфейса
│ ├── ui_1.png
│ └── ...
|
├── logistic-frontend/ # Исходный код фронтенда (React + Vite)
│ ├── src/
│ │ ├── pages/ # Страницы приложения (AnalysisPage, ResultPage и др.)
│ │ ├── components/ # Компоненты интерфейса (карта выбора области и пр.)
│ │ └── ... # Прочие файлы фронтенда (маршруты, стили, иконки)
│ ├── package.json # Зависимости и скрипты фронтенда
│ └── ... # Конфиги (Vite, ESLint), статические файлы и пр.
│
├── logistic-backend-python/ # Исходный код бэкенда (FastAPI)
│ ├── main.py # Запуск FastAPI-приложения, описание эндпоинтов
│ ├── models/ # Pydantic-модели (схемы данных API)
│ ├── services/ # Логика анализа: работа с OSM, построение графов, метрики
│ ├── requirements.txt # Список Python-зависимостей бэкенда
│ └── ... # Дополнительные файлы (тесты, кэш и др.)
│
├── start.sh # Скрипт запуска приложения для Linux/MacOS
├── start.bat # Скрипт запуска приложения для Windows
└── README.md # Текущее описание проекта- Использование дополнительных источников данных для учета ограничений (сейчас не учитываем, что по некоторым участкам дорог может быть запрещен проезд грузовых машин или он может быть невозможен из-за низкой высоты моста)
- Поиск наборов данных по реальным авиа-маршрутам (сейчас оцениваем расстояние геодезически)
- Автоматический расчет времени движения по маршруту - ребру в графе - для указанной пользователем средней скорости
- Изменение подхода к построению графа в зависимости от масштаба области (если область захватывает несколько городов, вершинами стоит обозначать не отдельные объекты, а сам факт наличия аэродрома / железнодорожной станции / etc.)


