Geo101
Приложение для активных путешественников: GPX-маршруты и офлайн-навигация для трейла, эндуро и пешего туризма.
Geo101 — подробно
Кратко о проекте
Geo101 — веб-приложение и устанавливаемое PWA для тех, кто ходит пешие маршруты, трейлы и эндуро-походы вне асфальта. Пользователь загружает GPX-файл, записанный любым трекером — Strava, Garmin, Wikiloc или похожим сервисом, — и получает маршрут на 3D-карте с реальным рельефом местности, графиком скорости и высоты, а также раскраской трека по темпу движения на каждом участке пути.
Кроме просмотра уже пройденных треков, в Geo101 есть планировщик маршрута: точки расставляются прямо на карте, сервис строит путь между ними и показывает, где пролегает тропа, а где — грунтовка или обычная дорога, ещё до того как человек вышел на маршрут.
Третья опорная функция — офлайн-режим. Приложение устанавливается на телефон как PWA и продолжает работать без связи там, где GPS ещё ловит сигнал, а интернета уже нет.
Важное уточнение: генеративного ИИ, LLM или ML-инференса в Geo101 нет. Это инженерия карт, геометрии и офлайн-режима в браузере. Единственное, что условно похоже на «умное» поведение, — классическая сигнальная обработка: сглаживание курса камеры и относительная процентильная шкала скорости вместо фиксированных значений в км/ч.
Задача
Вне асфальта надёжной картографии почти нет: маршрут обычно планируют по скриншотам чужих треков или по памяти, а связь заканчивается ровно там, где начинается интересный участок — в лесу, в горах, на грунтовке. Стандартные картографические приложения либо требуют онлайн-соединение для каждого тайла, либо не показывают рельеф в 3D, либо не различают тропу и грунтовую дорогу при построении маршрута — а для похода или эндуро-выезда это разница между «можно проехать» и «придётся нести на себе».
У человека, который уже прошёл маршрут и записал GPX-трек, тоже нет простого способа посмотреть его наглядно: где он замедлился на подъёме, где летел на спуске, каков профиль высот. Большинство трекеров показывают это таблицами и плоскими 2D-линиями на карте.
Решение
Основная цепочка выглядит так: GPX-файл → браузерный рендер на 3D-карте с рельефом → API маршрутизации для планирования новых треков → офлайн-слой, который сохраняет доступ к карте и трекам без связи.
GPX парсится и обрабатывается прямо в браузере, без обязательной отправки на сервер. 3D-карта строится на MapLibre GL JS с подключённым DEM-рельефом, так что маршрут показывается не плоской линией, а с реальным профилем местности. Для планирования нового маршрута приложение обращается к внешнему сервису маршрутизации, который строит пеший путь и размечает его по типу поверхности. Отдельный слой на основе Service Worker и PWA-манифеста делает карту и треки доступными без интернета.
Как работает
3D-визуализация трека с рельефом и раскраской по скорости
Загруженный GPX-трек рендерится на карте с переключением между 2D и 3D, рельефом местности и раскраской каждого сегмента по скорости движения — от медленных участков до быстрых. Рядом — синхронизированный с картой график скорости и высоты: перемещение ползунка по графику двигает маркер по треку, и наоборот.
Цвет скорости рассчитывается не по абсолютной шкале км/ч, а по относительным процентилям конкретного трека — поэтому пеший турист и велосипедист или райдер оба видят на своём треке полный цветовой градиент, а не один сплошной цвет. Скорость дополнительно сглаживается скользящим средним, чтобы убрать дребезг от неточных GPS-отметок времени.
Полёт от первого лица
Камера автоматически летит вдоль трека, повторяя маршрут пользователя над рельефом местности за секунды вместо часов реального похода. Скорость полёта и угол обзора камеры можно менять прямо во время воспроизведения.
Функция решает три инженерные проблемы. Курс сырых GPS-точек «дёргается» из-за неточности трекера — курс камеры заранее сглаживается оконным усреднением со смещением вперёд по треку, чтобы камера показывала направление движения именно вперёд. Рельеф и тайлы карты физически не успевают подгружаться по сети на быстром пролёте — перед стартом полёта приложение заранее прогревает нужные тайлы вдоль маршрута. А для плавности камера смотрит не строго в точку маркера, а с небольшим упреждением вперёд, и прогресс полёта считается по времени кадра, а не как доля фиксированной длительности — это убирает рывки при смене скорости.
Планировщик маршрута с раскраской по типу поверхности
На отдельной странице планировщика пользователь расставляет точки на карте, а сервис строит между ними маршрут через внешний сервис маршрутизации в режиме, предназначенном для пеших и трейловых путей. Результат раскрашивается по типу поверхности: тропы и лестницы — одним цветом, грунтовые дороги — другим, обычные дороги — третьим. Дополнительно можно включить подсветку троп, грунтовых дорог и леса поверх базовой карты.
Сервис маршрутизации возвращает не просто геометрию пути, а разметку по типу поверхности для каждого участка, которую фронтенд использует для раскраски без дополнительных запросов. Построенный маршрут можно сразу открыть в 3D-просмотрщике с той же раскраской, а кнопка возврата открывает его снова в планировщике.
Живая GPS-навигация
Отдельный режим навигации заставляет карту следовать за реальным положением пользователя с автоповоротом по курсу движения или по компасу устройства, с наклоном камеры и приближением — курс берётся из GPS при достаточной скорости и из компаса, когда GPS-направление ненадёжно. При включении навигации автоматически активируется блокировка выключения экрана, чтобы дисплей не гас во время использования телефона как навигатора.
Офлайн-режим и PWA
Приложение устанавливается на телефон как полноценное PWA и продолжает работать без связи: карта, рельеф и ранее просмотренные треки остаются доступны. Последний открытый трек сохраняется локально на ограниченный срок, а несколько последних треков доступны в разделе «Мои маршруты» без повторной загрузки файла.
За офлайн-доступ отвечает Service Worker с раздельной стратегией кэширования по типу ресурса, а не одним общим правилом «кэшировать всё». Тайлы рельефа кэшируются без ограничений — используются публичные данные без лицензионных запретов. Тайлы базовой карты кэшируются с жёстким лимитом и вытеснением старых записей, чтобы не занимать на телефоне слишком много места. Файлы самого приложения загружаются по стратегии «сначала сеть, при обрыве связи — из кэша».
Ключевые особенности
Относительная шкала скорости. Раскраска строится по процентилям конкретного маршрута, а не по фиксированным км/ч — пеший турист и велосипедист оба видят полный цветовой градиент, а не один цвет на весь трек.
Сглаживание курса камеры при полёте. Направление камеры вычисляется заранее оконным усреднением GPS-курса со смещением вперёд по треку — убирает рыскание камеры из-за шумных координат, облёт получается плавным на поворотах.
Предзагрузка тайлов перед полётом. Рельеф и тайлы карты вдоль маршрута загружаются заранее, до начала облёта, чтобы горы не «выпрыгивали» на реальную высоту с задержкой во время быстрого движения камеры.
Раздельное кэширование по типу ресурса. Service Worker хранит рельеф, тайлы карты и файлы приложения по разным правилам вместо одной общей стратегии — баланс между офлайн-покрытием карты и местом на телефоне.
Приватность по умолчанию. GPX-файл и GPS-координаты обрабатываются в браузере и не отправляются на сервер, если пользователь сам не выбрал поделиться треком по ссылке.
Техническая реализация
Архитектура строится на трёх слоях: обработка данных в браузере, серверный API маршрутизации и хранения, офлайн-слой поверх обоих. GPX-файл разбирается на клиенте — сервер не участвует, если пользователь не решает сохранить трек для расшаривания.
Карта построена на MapLibre GL JS — открытом форке картографической библиотеки без вендор-лока на конкретного поставщика. Рельеф подключается отдельным DEM-источником через встроенный API карты для 3D-местности. Тайлы рельефа и тайлы базовой карты (дороги, водоёмы, подписи, типы покрытия) взяты из разных источников: рельеф вынесен отдельно из-за лицензионных ограничений на офлайн-кэширование у основного поставщика векторных тайлов, а данные о рельефе публичные и кэшируются без ограничений.
Для построения маршрутов используется внешний сервис маршрутизации с профилем, рассчитанным на пеший и трейловый трафик, и с разметкой типа поверхности в ответе API — единственный доступный вариант с готовой классификацией поверхности пешего маршрута «из коробки». Бэкенд выступает прокси к этому сервису: принимает точки от фронтенда, обращается к внешнему API и подготавливает ответ перед передачей в интерфейс.
Расшаренные треки хранятся в собственной базе PostgreSQL и открываются по короткой ссылке без регистрации; хранилище изначально было построено на стороннем backend-as-a-service решении и позже перенесено на собственный сервер базы данных. Приложение развёрнуто как контейнеризированный сервис на собственной серверной инфраструктуре с SSL-сертификатом.
Технологический стек
Next.js, React — фронтенд, включая серверный рендеринг страницы шаринга трека.
Tailwind CSS — вёрстка интерфейса.
MapLibre GL JS — рендеринг 2D/3D-карты, слои рельефа и трека.
MapTiler — векторные тайлы базовой карты и слои дорог/покрытия/леса для раскраски планировщика.
AWS Terrain Tiles — DEM-тайлы рельефа для 3D-местности, вынесены отдельно из-за лицензии на офлайн-кэш.
OpenRouteService — построение пешего маршрута с классификацией типа поверхности.
PostgreSQL — хранилище расшаренных треков.
Service Worker, PWA-манифест — установка на устройство и офлайн-доступ.
Яндекс.Метрика, геолокация по IP — базовая веб-аналитика посещаемости.
Docker, Nginx, SSL — деплой на собственной серверной инфраструктуре.
Что получилось
Пользователь может спланировать маршрут с пониманием, где тропа, а где грунтовка, до выхода на местность; пересмотреть уже пройденный трек в 3D с профилем скорости и высоты; снять облёт маршрута камерой поверх рельефа; продолжить пользоваться картой и ранее загруженными треками без связи.
Приватность реализована архитектурно, а не декларативно: GPX-файл и GPS-координаты не покидают браузер, если пользователь явно не выбрал поделиться треком по ссылке.
Где можно использовать
Подходит для пеших туристов и трейл-раннеров, которым нужно и спланировать маршрут заранее, и наглядно пересмотреть его после похода.
Подходит для эндуро- и мотопоходов вне асфальта, где разница между тропой, грунтовкой и дорогой напрямую влияет на выбор маршрута.
Можно использовать турклубами и организаторами многодневных походов для предварительного просмотра и обсуждения маршрута группой до выезда.
Подходит для любого пользователя трекеров (Strava, Garmin, Wikiloc и подобных), которому нужен наглядный 3D-просмотр уже записанного GPX-файла вместо таблиц и плоской 2D-линии.
Задача с картами, треками или офлайн-режимом?
Обсудим, что именно нужно: визуализация треков, офлайн-навигация или геоаналитика — и с чего дешевле начать.
Ещё в портфолио
KILLOOS
Интеллектуальная система бизнес-аналитики, переводит данные в управленческие решения и предупреждает риски до потерь.
Подробнее →Vizgen
Визуальный редактор для работы с контентом: генерация карточек товара, визуализация и апскейл — доставляется через REST API.
Подробнее →Georeis
Диспетчеризация доставки и приложение водителя: маршрут по фото путевого листа → оптимизированный план на день.
Подробнее →Kitchen 3D Planner
Планировщик кухни для мебельных компаний: подбор модулей, фасадов и техники по размерам помещения, с 3D-сборкой на выходе.
Подробнее →Driver.Georeis
Приложение для водителей Georeis: распознаёт адреса с фото путевого листа, сверяет по адресной базе и строит порядок объезда с расчётом времени прибытия.
Подробнее →OpenSEO
Генерация SEO-статей по заданной структуре — с очеловечиванием стиля и независимой валидацией результата перед публикацией.
Подробнее →DeviceHub
Единый сервис метрик для физических устройств на столе: тянет данные сразу из нескольких продуктов и отдаёт готовые экраны без перепрошивки.
Подробнее →Rilso
Рабочее место для упаковки рилсов: из сырого видео — превью, транскрипт, вшитые субтитры, обложка, текст публикации, хэштеги и архив на экспорт.
Подробнее →Лабсервер
Собственный GPU-сервер для тестирования моделей, подбора параметров и сборки MVP в закрытом контуре — без выхода данных наружу.
Подробнее →