Skip to content

citec-spbu/analyze-logistic

Repository files navigation

Сервис по анализу регионально-транспортной логистической системы

Coverage Python License

Веб-приложение для анализа регионально-транспортной логистической инфраструктуры. Позволяет получать объекты логистики из OpenStreetMap по заданной области, строить минимальное остовное дерево (MST) связей между ними и рассчитывать ключевые графовые метрики.

Возможности

  1. Загрузка данных логистической инфраструктуры (склады, терминалы, порты и др.) из OpenStreetMap в пределах заданного региона
  2. Построение полной графовой модели (геодезический граф) и выделение минимального остовного дерева для выбранного вида транспорта: автомобильного, авиационного, морского или железнодорожного
  3. Вычисление основных метрик графа: центральность степени узла, центральность близости, центральность посредничества, а также PageRank
  4. Генерация интерактивной карты с визуализацией логистической сети и результатами анализа (MST и выбранные метрики)

Компоненты

  1. Frontend (React + Leaflet) – одностраничное веб-приложение на базе Vite. Предоставляет интерактивную карту для выбора области анализа и отображает результаты (маршрут MST, метрики)
  2. 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) и отобразит на карте результаты расчёта (например, степень каждого узла цветом или размером).

Скриншоты интерфейса

screen_1 screen_2 screen_3

Структура проекта

.
├── 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.)

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors