Розробка мобільного додатку для моніторингу транспорту
Диспетчер дивиться на карту — 40 вантажівок, і три з них не оновлювали позицію вже 20 хвилин. Зависла ли трансляція? Немає мережі в горах? Або GPS-антена відключена навмисне? Це три різних сценарії з різною реакцією, і додаток повинен їх розрізняти — а не просто фарбувати точку в сірий колір.
Що на самому діді потрібно диспетчеру
Додаток моніторингу — не просто «маркери на карті». Диспетчер працює з парком 20–200 одиниць і йому потрібні:
- Реальний час з метаданими: координата + швидкість + напрямок + статус двигуна + заряд батареї трекера
- Історія треку: маршрут за день/тиждень з геокодованими адресами зупинок
- Геозонування: уведомлення при в'їзді/виїзді з зони складу, стройплощадки, заборонної території
- Алерти: перевищення швидкості, довга стоянка з заведеним двигуном, відхилення від маршруту
Все це вимагає різної архітектури на клієнті.
Приймання даних телематики в реальному часі
Телематичні блоки (Teltonika FMB, Wialon TK, Navixy OEM) передають дані через TCP або GPRS на сервер. Мобільний додаток не з'єднується з трекерами напрямки — отримує вже обробленний потік через WebSocket або MQTT-клієнт.
На Android використовуємо OkHttp WebSocket з EventBus або SharedFlow для доставки оновлень в ViewModel. На iOS — URLSessionWebSocketTask (iOS 13+) або Starscream для більш старих target'ів. Оновлення приходять як JSON або protobuf — protobuf переважніший при великому флоті: 40 машин × 10 полів в protobuf займає ~1.5 КБ проти ~8 КБ в JSON.
Карта: продуктивність з великим флотом
200 маркерів на карті з анімацією — це вже напружено. Ключові рішення:
Анотації замість SVG-оверлеїв. На iOS MKAnnotationView обробляє до ~300 маркерів без помітного лагу. Понад — використовуємо MKOverlay з кастомним рендерером, який рисує всі точки в одному CALayer. На Android Google Maps SDK з деградацією після ~500 маркерів — переходимо на Mapbox Maps SDK v10 з SymbolLayer на основі GeoJSON source: весь флот оновлюється одним вклком source.setGeoJson(featureCollection).
Кластеризація на сервері. При zoom < 11 кластери розраховуються на сервері (PostGIS ST_ClusterKMeans), клієнт отримує готові центроїди зі счітачем. Локальна кластеризація (Supercluster) підходить для флотів до 300–400 одиниць.
Анімація руху. Позиція трекера оновлюється раз в 10–30 секунд — маркер не повинен «стрибати». ValueAnimator з LatLngInterpolator (Android) або CABasicAnimation з CGPoint interpolation (iOS) — маркер плавно «ковзає» до нової точки.
Історія треку та геокодування
Трек за день — це 2000–8000 точок залежно від інтервалу запису. Відображаємо через Polyline / MKPolyline, але не весь трек одночасно: завантажуємо bbox видимої області карти й запитуємо точки лише для неї. При zoom «весь день» — дискретизуємо трек алгоритмом Douglas-Peucker на сервері.
Адреси зупинок — reverse geocoding через Google Maps Geocoding API або OpenStreetMap Nominatim (self-hosted). Кешуємо результати в SQLite, щоб не повторювати запити при скролі історії.
Алерти та уведомлення
Перевищення швидкості, геозонні події, довга стоянка — триггери обчислюються на сервері, push-уведомлення приходить через FCM/APNs. На iOS використовуємо UNNotificationCategory з UNNotificationAction — прямо з уведомлення можна відкрити карту з конкретним транспортним засобом.
Геозони — полігони GeoJSON, перевірка ST_Contains в PostgreSQL + PostGIS при кожному входящому повідомленні від трекера. Мобільний клієнт лише відображає геозони й отримує алерти — не обчислює перетини локально.
Етапи та строки
Мобільний додаток для моніторингу транспорту розробляється паралельно з сервером обробки телематики або як надбудова над існуючою платформою (Wialon, Gurtam, Navixy — все надають SDK/API).
- Аудит телематичної платформи та API
- Дизайн інтерфейсу диспетчера: карта, список транспорту, історія, алерти
- Розробка: карта → реальний час → історія → геозони → уведомлення
- Нагрузоеве тестування (імітуємо 200+ трекерів з частотою оновлення 30 сек)
- Публікація
MVP (карта + реальний час + історія): 6–10 тижнів. Повна платформа з геозонами, алертами, аналітикою пробігу та звітами: 3–5 місяців. Вартість розраховується після аудиту існуючої інфраструктури.







