Розробка мобільного додатку для навігації по місту
Ми розробляємо навігаційні додатки для 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 тижнів залежно від функціоналу. Вартість розраховується індивідуально. Замовте розробку навігаційного додатку під ключ — пишіть нам для попередньої оцінки.







