ЗАБОТА, КОТОРАЯ ПРЯЧЕТСЯ В КОДЕ

Что мы сделали
для вашего спокойного путешествия

Хочется идти по лесу, замечать красивое и иногда поглядывать на карту. Мы тоже любим, когда техника не требует лишнего внимания. Поэтому за простыми кнопками «Старт» и «Обратно» у «Азимутов» стоит довольно много работы. Расскажем, какой именно.

Заметки разработчика · 5 октября 2026 года

Кот склонился над картой и показывает маршрут
01 / КАРТА УЖЕ С ВАМИ

«Я же скачал карту». Знакомое чувство?

Дома всё было на месте: лес, озеро, поворот к стоянке. Вы открывали карту, двигали её, рассматривали тропинки. А потом связь пропала — и на экране осталась точка посреди пустого поля. В такой момент совсем не хочется разбираться, что именно приложение успело сохранить.

Мы тоже знаем это неприятное ощущение. Поэтому в «Азимутах» начали с простого требования: загруженная карта должна действительно лежать в телефоне. Чтобы её можно было открыть там, где интернет уже закончился.

Посмотреть карту и скачать регион — разные действия

Недавно просмотренные фрагменты могут временно сохраняться в кэше. Это ещё не означает, что подготовлена вся территория поездки: на другом масштабе или за соседним холмом могут понадобиться новые данные. Поэтому перед выходом в «Азимутах» вы скачиваете выбранный регион отдельным пакетом. Карта хранится локально, а значки и шрифты поставляются вместе с приложением.

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

Кот и пёс рассматривают карту на телефоне среди берёз и грибов
Вышка осталась где-то за лесом. Подготовленная карта — в телефоне.

Что остаётся доступным без интернета

В пределах загруженного покрытия можно рассматривать карту, пользоваться сохранёнными местами, записывать путь и возвращаться по записанному следу. В полной версии маршруты по дорогам рассчитываются на телефоне, если дорожные данные региона уже скачаны. Для этих действий не нужно отправлять ваш маршрут на сервер.

Интернет нужен заранее — для получения и обновления пакетов. Автономность также не отменяет границы загруженного региона, заряд батареи, разрешения Android и доступность спутникового сигнала. Карта может оставаться на экране даже тогда, когда свежей координаты ещё нет.

Офлайн — это подготовленная поездкаЗагрузите всё нужное до выхода. При переходе в другой регион проверьте его покрытие и доступность в вашей версии. В бесплатной версии один регион выбирается один раз; дополнительные регионы доступны в полной.

ПЯТЬ МИНУТ ДО ВЫХОДА

Устройте карте маленькую репетицию

  1. Дождитесь завершения загрузки нужного региона и необходимых дорожных данных.
  2. Отключите Wi-Fi и мобильную передачу данных, оставив включённым определение местоположения.
  3. Откройте район всей поездки и посмотрите карту на нескольких масштабах. Проверьте точки старта и финиша.
  4. На открытом месте дождитесь свежей координаты. Запишите короткую прогулку, погасите экран и проверьте, что запись продолжается.
  5. Проверьте заряд, свободное место и настройки фоновой работы. Сообщите близким маршрут и время возвращения; возьмите резервные средства ориентирования, которыми умеете пользоваться.

Это полезная проверка именно вашего телефона и выбранного региона. Она помогает обнаружить недокачанный пакет или ограничение Android ещё дома, но не предсказывает все условия будущей поездки.

02 / ПОКА ТЕЛЕФОН В КАРМАНЕ

Записываем путь постепенно, а не откладываем всё до финиша

Мы не держим всю прогулку только в памяти до нажатия «Финиш». Принятые точки по ходу записи добавляются в файл на телефоне. Если приложение неожиданно закрылось, при следующем запуске оно ищет незавершённые журналы и восстанавливает из них уже записанную часть пути.

Запись работает отдельной фоновой службой Android с видимым уведомлением. Поэтому экран можно погасить, а телефон — убрать в карман. При этом у разных производителей свои правила экономии заряда: если телефон ограничивает фоновую работу, для «Азимутов» стоит разрешить запись без таких ограничений. Восстановление сохранит уже записанное, но не сможет придумать точки за время, когда приём был остановлен.

Пешая прогулка и поездка на машине — разные истории

Для них мы сделали разные профили. В режиме «Грибы» минимальное расстояние между принятыми точками — 3 метра, пешком — 4, на велосипеде — 8, на мотоцикле — 15, на машине — 25. Это шаг записи, а не обещанная точность GPS: новая точка ещё должна пройти проверки качества.

На остановках датчики движения и скорость помогают включать автопаузу в пеших и велосипедном режимах. Так небольшой дрейф координат у скамейки реже превращается в лишние метры прогулки.

03 / ОТ СПУТНИКА ДО ТОЧКИ

Связь с вышкой и связь со спутником — две разные истории

Когда мы сели писать «Азимуты», нам было важно разобраться, откуда берётся координата и что происходит с ней по дороге к карте. Для прогулки мало получить пару чисел: хочется понимать, насколько свежая точка, что видит приёмник и почему положение вдруг изменилось.

Мы выбрали системный спутниковый провайдер Android — GPS_PROVIDER. Основную координату рассчитывает GNSS-приёмник телефона, а приложение получает её через Android. Google Play Services для этого пути не требуется. Отсутствие мобильного интернета само по себе не выключает спутниковый приём.

Пёс через подзорную трубу с любопытством смотрит на маленькие спутники
Пёс решил пересчитать спутники лично. Телефон делает это своим приёмником.

Что мы написали сами

Свой программный слой приёма и отображения спутниковых данных, оценку подозрительных изменений, фильтрацию точек, запись пути и расчёт возвращения по следу. Карта отображается с помощью MapLibre, а спутниковые измерения предоставляет Android: эти готовые компоненты тоже часть приложения.

В исследовательской части мы пошли глубже: написали разбор навигационных сообщений, расчёт положения спутников и собственный решатель координат. Здесь пригодились те самые 530 страниц спецификаций. Но обычный трек по-прежнему использует координату телефона; экспериментальный решатель можно изучать отдельно.

Где появляется ощущение быстроты

Загруженная карта и расчёты пути доступны локально. Для этих операций приложению не приходится ждать ответа сервера по слабой лесной сети. Именно так мы убираем сетевую задержку из основного сценария.

При этом время первого определения позиции, плавность карты и расход заряда зависят от телефона, объёма данных и условий приёма. Мы не проводили сравнительного теста, который позволял бы обещать, что «Азимуты» всегда быстрее других приложений. А приёмник без вспомогательных данных после долгого перерыва может искать первую координату дольше.

В приложении можно посмотреть видимые спутниковые системы, участие спутников в решении и заявленную устройством точность. Число спутников помогает понять обстановку, но само по себе не гарантирует правильность точки.

04 / КОГДА ТОЧКА ПУСТИЛАСЬ В ПЛЯС

Вы стоите у дерева. Точка уже на другом берегу.

Бывает и так. Координата может дрейфовать из-за слабого или отражённого сигнала, а иногда на приём влияют помехи или подмена. Мы учитываем, что спутниковая точка способна ошибаться, даже если выглядит на экране вполне уверенно.

Поэтому написали эвристическую проверку сигнала. По-человечески — набор признаков, которые помогают заметить: «Что-то здесь не сходится». Один необычный показатель ещё не объясняет причину. Несколько совпавших признаков дают больше оснований обратить внимание.

Кот с сачком ловит точку, выпрыгнувшую с карты; пёс удивлённо смотрит на след
Кот ловит прыгающую точку. Код проверяет, насколько правдоподобен её прыжок.

Что именно настораживает приложение

  • Резкий скачок положения или времени.
  • Неожиданное исчезновение спутниковых систем либо ранее доступного частотного диапазона.
  • Необычно похожая сила разных сигналов и другие изменения доступных приёмнику показателей.

Признаки складываются в общую оценку. В разделе сигнала можно увидеть причины предупреждения. Нам важно не просто покрасить значок, а дать понятную подсказку: какие данные сейчас вызывают сомнение.

При включённой проверке состояния «вероятна подмена» и «помехи» блокируют приём новых точек в трек. Уровень «подозрительно» сам по себе запись не останавливает. Предупреждение снимается с задержкой: алгоритм ждёт минуту без признаков, поддерживающих прежний уровень тревоги. В треке при этом возможны пропуски.

Проверка помогает заметить проблему, но не удостоверяет координатуЭвристика может ошибочно насторожиться или пропустить проблему. Доступность признаков зависит от телефона; в фоне их набор может быть неполным. Отсутствие предупреждения не означает, что сигнал подлинный, а маршрут безопасен.

Если карта спорит с местностью

Остановитесь в безопасном месте и сопоставьте положение с узнаваемыми ориентирами и резервными средствами навигации. Не пытайтесь «догнать» точку через воду, склон или закрытую территорию. При необходимости помощи обращайтесь в экстренные службы по номеру 112; возможность звонка зависит от доступности сети. Приложение «Азимуты» не отправляет спасателям ваше положение автоматически.

05 / ПОРА ВОЗВРАЩАТЬСЯ

Обратный путь строится из вашей прогулки

Кнопка «Обратно по следу» использует уже записанный путь. Запись при этом продолжается. Приложение показывает оставшуюся часть маршрута и помогает держать направление к началу.

Мы также учли прогулки с петлями: за грибами редко идут по идеальной прямой. Алгоритм ищет более короткий обратный путь по точкам следа и может соединять его близкие участки. На контрольном примере в проекте путь с петлёй длиной около 1 199 метров превращается в обратный маршрут около 799 метров.

Такое соединение рассчитывается по расстоянию между точками. Приложение не знает, есть ли между ними канава, забор или заросли. Поэтому предложенное сокращение нужно сопоставлять с тем, что вы видите вокруг. Можно ориентироваться и по полной линии записанного трека.

А если нужно просто держать направление к машине или лагерю, сохраните это место. Ведение к точке по прямой показывает направление и расстояние; в полной версии дополнительно доступен расчёт по загруженной дорожной сети.

06 / ЧТО ВОКРУГ ВАС

Даже у привычной стрелки компаса есть своя математика

Магнитный север и север на карте не обязаны совпадать. Мы учитываем магнитное склонение — поправку для вашего места и времени — по модели, доступной в Android. Она помогает согласовать стрелку с географическим севером.

Но модель не отменяет влияние металла рядом с телефоном. Автомобиль, магнитный чехол или плохо откалиброванный датчик могут мешать. Поэтому приложение показывает состояние компаса и подсказывает, когда полезна калибровка.

Рельеф мы подготовили заранее

За тенями холмов на карте стоит обработка модели поверхности Copernicus GLO-30. По журналу подготовки проекта, исходный набор состоял из 3 725 файлов объёмом 78,6 ГБ. Из него были собраны компактные региональные файлы рельефа. Эту работу выполняли заранее на компьютере: вашему телефону не нужно разбирать весь исходный массив в походе.

Есть тонкость: модель описывает поверхность. В лесу это может быть верх крон, а не земля под ногами. И отображение рельефа на карте сейчас отделено от расчёта высоты под конкретной точкой: для численных высот и профиля нужны отдельные локальные данные. Наличие красивой отмывки ещё не означает, что подробный высотный профиль доступен повсюду.

07 / НАША СПУТНИКОВАЯ МАСТЕРСКАЯ

Сотни страниц — чтобы разобраться в том, что сообщает спутник

530 страниц в четырёх базовых спецификациях проекта

Фрагменты настоящего Kotlin-кода исследовательского модуля. Он ещё экспериментальный; основной трек получает координаты от спутникового приёмника телефона.

GPS, ГЛОНАСС, Galileo и BeiDou передают данные по разным правилам. Чтобы разбираться в них, мы работаем с первоисточниками: описаниями форматов сообщений, времени, орбит и поправок. В проекте сохранены четыре такие спецификации — вместе 530 страниц. Этот набор описывает конкретные форматы сигналов, с которыми работает наш исследовательский модуль.

По этим правилам мы написали собственный разбор навигационных сообщений и расчёт положения спутников. Если очень коротко: сначала нужно понять, где был спутник и что показывали его часы в момент отправки сигнала, а затем сопоставить измерения от нескольких спутников.

Приходится учитывать, что за время полёта сигнала Земля успевает немного повернуться, часы разных систем устроены по-разному, а атмосфера задерживает радиоволну. В коде есть соответствующие расчёты и приближённые поправки. Для GPS, Galileo и BeiDou используются параметры орбит, а движение спутников ГЛОНАСС рассчитывается шаг за шагом по уравнениям.

Это пока исследовательская часть «Азимутов»Свой расчёт координат находится в разделе экспериментов. Он сравнивает результаты отдельных систем и общего решения с координатой телефона. Обычная запись трека продолжает использовать системный спутниковый приёмник. Мы не заявляем, что наш эксперимент уже точнее него или одинаково работает на всех устройствах.

Возможности здесь зависят и от телефона: не каждый приёмник отдаёт все исходные измерения и сообщения. Поэтому мы показываем, какие данные реально доступны, а не приписываем устройству то, чего в нём нет.

08 / ПЕРЕПРОВЕРИТЬ СЕБЯ

Для расчёта мало просто получить красивое число

В проекте есть отдельные проверки, которые запускаются на компьютере без телефона. Они сравнивают маршруты с контрольными результатами, проверяют возвращение по следу, привязку старых карт, астрономические расчёты и поведение проверки сигнала на заданных сценариях.

Для собственного спутникового решателя есть синтетические измерения: мы заранее знаем исходную точку и можем проверить, получается ли она обратно. А записанные сырые измерения можно повторно прогонять через расчёт после изменений. Это удобно: один и тот же исходный материал помогает увидеть, что именно поменялось.

В журнале разработки также сохранены проверки на эмуляторе и реальном телефоне: например, прерывание загрузки карты с последующим продолжением и запись прогулки при выключенном экране. У каждой проверки своя задача. Синтетический пример подтверждает работу конкретного расчёта; он не обещает такую же точность в лесу на любом телефоне.

ПОНЯТНО С ПЕРВОЙ ПРОГУЛКИ

Навигация XXI века должна оставлять время на саму прогулку

Мы считаем, что для обычного похода за грибами не должно требоваться вечернее изучение десятков меню. Хочется увидеть карту, отметить машину, начать запись и понять, как вернуться. На этих действиях мы и строим основной сценарий «Азимутов».

Спутниковые подробности и эксперименты есть для тех, кому интересно заглянуть глубже. Чтобы записать прогулку, разбираться в эфемеридах и поправках часов не нужно.

Седобородый дедушка в круглых очках спокойно смотрит маршрут на телефоне рядом с котом
Опыт большой. Меню короткое.

Первые действия — по порядку

  1. Подготовить карту. Выбрать и загрузить регион до поездки.
  2. Запомнить начало. Сохранить машину или другую точку, к которой хотите вернуться.
  3. Записать прогулку. Выбрать подходящий профиль и убедиться, что запись началась.
  4. Посмотреть обратный путь. Открыть возвращение по следу и сверять подсказки с местностью.

«Просто» и «понятно» — наш ориентир в дизайне. Люди и телефоны разные, поэтому обещать, что каждый разберётся без единого вопроса, было бы нечестно. Попробуйте короткую знакомую прогулку перед большим маршрутом. Если какое-то действие пришлось искать — расскажите нам: это полезный материал для следующей версии.

09 / ВАША ИСТОРИЯ ПУТЕШЕСТВИЙ

Грибные места можно оставить при себе

Координаты, треки и сохранённые места остаются в папке приложения на вашем телефоне. Для записи пути не нужен аккаунт. Сервер нужен для каталога регионов и получения ссылок на скачивание; для этого передаются идентификатор установки и сведения о доступе, а не история вашей прогулки.

В полной версии трек можно экспортировать в GPX — распространённый формат маршрутов. Вы сами решаете, куда его отправить и кому показать. Подробнее об обмене данными мы написали в политике конфиденциальности.

И ещё одна практическая договорённость: бесплатная версия хранит один трек. Перед заменой предыдущего приложение предупреждает. Если важно собирать историю поездок, в полной версии можно хранить несколько треков.

Технические возможности описаны вместе с условиями их работы. Перед поездкой прочитайте ограничения навигации и ответственности.

Нам нравится разбираться в сложном.
Чтобы вам было проще в пути.

Загрузите карту, проверьте запись и выберите свой темп. А если хочется узнать, как всё это устроено внутри, мы собрали стек, алгоритмы и ограничения на отдельной странице.

Заглянуть под капот