Разработка мобильного приложения для навигации по городу
Мы разрабатываем навигационные приложения для iOS и Android, которые не только показывают маршрут, но и учитывают пробки, офлайн-доступность и голосовые подсказки. За 5+ лет работы мы реализовали 30+ проектов в этой сфере — от пешеходных гидов до автомобильных навигаторов с интеграцией в CarPlay и Android Auto. Каждый проект начинается с выбора картографической платформы: Google, Mapbox, HERE или OpenStreetMap. От этого зависят стоимость, сроки и функциональные возможности. Мы помогаем клиентам найти баланс между точностью маршрутизации, стоимостью лицензий и офлайн-поддержкой.
Какую картографическую платформу выбрать для навигационного приложения?
Первое архитектурное решение — выбор SDK. Оно определяет стоимость и возможности на годы вперёд.
| Платформа | Маршрутизация | Трафик | Офлайн | Кастомный стиль | Стоимость |
|---|---|---|---|---|---|
| Google Maps SDK + Navigation SDK | Отлично | Да (реальное время) | Нет | Ограниченно | Высокая при объёме |
| Mapbox | Отлично | Да (Isochrone API) | Да (OfflineManager) | Полная свобода | Средняя |
| HERE Maps | Хорошо | Да | Да | Средняя | Средняя |
| 2GIS | Хорошо для СНГ | Ограниченно | Да | Ограниченно | Низкая для СНГ |
| OpenStreetMap + OSRM | Открытый исходный код | Нет | Зависит от хостинга | Полная | Серверные расходы |
Google Navigation SDK даёт лучший turn-by-turn опыт из коробки, но лицензия запрещает отображать конкурирующие сервисы рядом с картой. Mapbox — максимальная гибкость, офлайн-карты, кастомные стили через Mapbox Studio.
Как обеспечить точное позиционирование и map matching в городе?
CLLocationManager / FusedLocationProviderClient — базовый GPS. Для навигации важно:
-
desiredAccuracy: kCLLocationAccuracyBestForNavigation(iOS) — максимальная точность, высокое энергопотребление -
distanceFilter: 5метров — обновление при каждом значимом движении - Фоновая работа:
locationbackground mode +allowsBackgroundLocationUpdates = true
Map matching — привязка GPS-точек к дорожной сети. Raw GPS прыгает по 10-30 метров, особенно между зданиями. Mapbox Map Matching API принимает набор координат и возвращает трек, привязанный к дорогам. Без этого машина «едет сквозь здания» на карте. Согласно официальной документации Mapbox, точность map matching достигает 1-2 метра при плотной сети дорог. Для пешеходной навигации map matching важен меньше — пешеход может идти где угодно, строгая привязка к дорогам мешает.
Определение направления движения
Compass heading (CLHeading / SensorManager.getDefaultSensor(TYPE_ROTATION_VECTOR)) — для пешехода. Orientation of velocity vector — для автомобильной навигации: направление берётся из последних двух GPS-точек, а не из компаса (точнее при движении). При скорости < 5 км/ч — переключаемся обратно на компас.
Поворот карты по направлению движения: GMSCameraUpdate.setTarget(_:bearing:) (Google) или MapboxMap.setCamera(CameraOptions(bearing:)). Плавный поворот через анимацию с CATransaction / анимированным camera update.
Turn-by-turn и голосовые подсказки
Готовые SDK (Mapbox Navigation SDK, Google Navigation SDK) предоставляют NavigationViewController / MapboxNavigationView — полноценный UI навигации. Кастомизация: цвета, иконки, скрытие/показ элементов через configuration objects.
Для голосовых подсказок: Mapbox Navigation SDK использует SpeechSynthesizer с возможностью замены на Amazon Polly или кастомный TTS. Google Navigation SDK — встроенный TTS без прямого доступа. AVSpeechSynthesizer (iOS) / Android TextToSpeech если строим подсказки самостоятельно.
Очень важно: прерывание воспроизводимого аудио (музыки, подкаста) на время подсказки. AVAudioSession.sharedInstance().setCategory(.playback, options: .duckOthers) на iOS — снижает громкость другого аудио, не останавливает. AudioFocusRequest.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK на Android — аналог.
Пересчёт маршрута и альтернативные маршруты
Отклонение от маршрута → пересчёт. Mapbox Navigation SDK делает это автоматически при отклонении более чем на RouteOptions.maximumAllowedDivergence (по умолчанию 20 метров от маршрута). Пересчёт занимает 0.5-2 секунды, за это время навигация продолжается по старому маршруту.
Альтернативные маршруты при старте: Google Directions API и Mapbox Directions API возвращают до 3 альтернатив. Отображение на карте тонкими линиями, tap для переключения.
Почему офлайн-навигация требует отдельного подхода?
Офлайн-навигация — один из самых сложных компонентов. Mapbox OfflineManager позволяет скачать тайлы региона, но маршрутизация в офлайне требует серверного движка. Основные варианты:
| Движок | Язык | Размер графа (страна) | Производительность |
|---|---|---|---|
| OSRM | C++ | 200-500 МБ | Высокая, но требует сервера |
| Valhalla | C++ | 300-600 МБ | Средняя, гибкое профилирование |
| GraphHopper | Java | 100-300 МБ | Встраивается на Android через JNI |
Для полного офлайна на устройстве — GraphHopper Embedded, интеграция в Android через JNI или мобильный граф-файл (~100-500 МБ для страны). На iOS аналогичное решение — использование Core ML или Metal для ускорения.
Что входит в разработку навигационного приложения?
- Документация: API-схемы, архитектура, инструкции по развёртыванию серверной части.
- Исходный код с комментариями: модули карт, GPS, маршрутизации, TTS.
- Доступы: аккаунты разработчика App Store и Google Play, ключи API картографических SDK.
- Обучение команды заказчика: воркшоп по кастомизации карт, работе с офлайн-кешем.
- Техническая поддержка: 2 недели после релиза.
Срок разработки: от 10 до 20 недель в зависимости от функционала. Стоимость рассчитывается индивидуально. Закажите разработку навигационного приложения под ключ — пишите нам для предварительной оценки.







