Skip to content

Repository files navigation

Cyber GPS Monitor & OSM Visualizer

Интерактивное C++ приложение для сбора телеметрии и визуализации перемещений на картах OpenStreetMap.

🏗 Архитектура проекта (Clean Code)

Проект был отрефакторен и разделен на независимые модули по принципу «Единой ответственности» (Single Responsibility). Это позволяет легко менять один компонент (например, интерфейс), не ломая логику сети или базы данных.


1. main.cpp (Точка входа)

Самый легковесный файл в проекте. Его единственная задача — создать объекты модулей, связать их друг с другом, запустить фоновые потоки и стартовать главный цикл отрисовки графики.


2. AppState.h (Глобальное состояние)

Заменяет глобальные переменные. Это thread-safe контейнер, который хранит векторы с координатами, историю PCI/RSRP и статус приложения. Все модули получают ссылку AppState& и читают/пишут данные через защищенные мьютексы (std::mutex), что исключает состояние гонки (race conditions).


3. Network.h / Network.cpp (Сетевой слой)

Отвечает за общение с внешним миром (Android-смартфоном).

  • Поднимает сервер на сокетах ZeroMQ (tcp://*:5555).
  • Принимает JSON-пакеты телеметрии.
  • Записывает сырые данные в бэкап-файл gps_track_log.json.
  • Распарсенные данные аккуратно складывает в AppState и передает в Database.
  • Работает в отдельном фоновом потоке (std::thread), чтобы не блокировать и не тормозить графический интерфейс.

4. Database.h / Database.cpp (Слой хранения данных)

Инкапсулирует всю логику работы с PostgreSQL (libpq).

  • Динамически генерирует безопасные SQL-запросы INSERT на основе прилетевшего JSON с телеметрией.
  • Умеет выгружать историю трека из БД в AppState для отрисовки старых маршрутов по кнопке "LOAD TRACK".
  • Реализует массовый асинхронный импорт накопленного JSON-лога в базу данных.

5. TileManager.h / TileManager.cpp (Менеджер карт OSM)

Обеспечивает работу с картами:

  • Асинхронность: Использует std::async для загрузки картинок в фоне, чтобы интерфейс приложения не "зависал" во время ожидания ответа от серверов OSM.
  • Curl: Выполняет HTTP-GET запросы за тайлами (.png).
  • Кэширование: Сохраняет скачанные тайлы на диск по пути build/{z}/{x}/{y}.png. При повторном обращении к координатам тайл берется с жесткого диска, экономя трафик.
  • STB Image & OpenGL: Декодирует .png в сырые пиксели (RGBA) и безопасно передает их в главный поток для создания текстуры OpenGL (glGenTextures).

6. Gui.h / Gui.cpp (Пользовательский интерфейс)

Отвечает исключительно за графику (на базе ImGui и ImPlot).

  • Отрисовывает таблицы статуса, кнопки управления, графики уровня сигнала (RSRP).
  • Рисует карту OpenStreetMap.
  • Автоматически вычисляет, какие тайлы (x, y) сейчас видны на экране (исходя из ImPlot::GetPlotLimits()), и запрашивает их загрузку/отрисовку у TileManager.

7. MapMath.h (Математика)

Хелпер с чистыми математическими функциями без сторонних зависимостей. Содержит формулы проекции Меркатора для перевода стандартных GPS-координат (Долгота/Широта) в координаты тайлов OSM (X/Y) на нужный уровень зума и обратно.

🛠 Установка зависимостей

Для сборки проекта требуются:

  • CMake (>= 3.10)
  • OpenGL (GLEW / GLFW или SDL2)
  • libCURL (для HTTP запросов к серверу тайлов)
  • PostgreSQL (libpq) (для базы данных)
  • ZeroMQ (для сокетов)

(Укажи команды для Linux, например: sudo apt install libcurl4-openssl-dev libpq-dev libzmq3-dev)

🚀 Компиляция и запуск

mkdir build && cd build
cmake ..
make
./MapApp


About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages