Шар карти дашборду C2 — це не просто фонове зображення, поверх якого позиціонуються символи. Це рушій відображення в реальному часі, що повинен одночасно обробляти тисячі динамічних об'єктів, кілька шарів даних, що перекриваються, та взаємодію з користувачем — панорамування, масштабування, вибір — не деградуючи цикл оновлення, що підтримує актуальність оперативної картини.

Ця стаття порівнює три основні технології відображення карт, що використовуються в розробці оборонних C2: Cesium.js, Mapbox GL JS та власні тайл-сервери, і проводить тести продуктивності при кількостях треків, що мають значення: 1 000, 5 000 та 10 000 одночасно рухомих об'єктів.

Вимоги до шару карти у військових C2

Кількість об'єктів. Тактична система C2 на рівні бригади в умовах високої інтенсивності відстежує 500–2 000 об'єктів. Театральна система ППО відстежує 5 000–50 000 об'єктів у повітряному, наземному, морському та космічному доменах. Шар відображення карти повинен підтримувати прийнятну частоту кадрів при верхній межі очікуваної кількості об'єктів.

Частота оновлень. Повітряні треки повинні оновлюватися не гірше ніж 1 Гц (одне позиційне оновлення на секунду на трек). При 1 000 повітряних треках, що оновлюються з частотою 1 Гц, рендерер отримує 1 000 позиційних оновлень на секунду, кожне з яких має відображатися в наступному відрендеренному кадрі.

Вимога до 3D рельєфу. Для наземного командування C2 достатньо 2D-карти зверху. Для ППО, управління артилерійським вогнем та планування місій БпЛА точний 3D-рельєф є оперативною вимогою. Шар карти повинен підтримувати візуалізацію даних висот через відмивання рельєфу або справжній 3D-рендеринг рельєфу.

Обмеження закритих мереж. Всі картографічні дані — супутникові зображення, висотні дані рельєфу, векторні об'єкти — повинні обслуговуватися зсередини периметра закритої мережі. Не допускаються зовнішні виклики CDN або API.

Cesium.js: переваги для 3D оборонної візуалізації

Cesium.js — це відкрита JavaScript-бібліотека для 3D-глобусів та 2D-карт, початково розроблена для візуалізації супутникових та космічних місій, згодом широко прийнята в оборонних застосуваннях, що потребують точного 3D-моделювання Землі.

Режим глобуса та еліпсоїдна точність. Cesium відображає Землю як еліпсоїд WGS84, що означає: позиції об'єктів розміщуються з геодезично точним підвищенням. Повітряний трек на висоті 3 000 метрів відображається на 3 000 метрів над поверхнею рельєфу. Для ППО та далекодального вогневого управління це оперативна вимога.

Cesium Ion та розміщений локально рельєф. Для розгортань у закритих мережах сервіс Ion замінюється власним хостовим екземпляром: тайли рельєфу у форматі quantized-mesh та тайли зображень попередньо завантажуються на локальний сервер. Формат quantized-mesh є відкритим стандартом; тайли рельєфу можуть генеруватися з висотних даних (DTED, SRTM) за допомогою відкритих інструментів.

Продуктивність при масштабі. Тестування на апаратному забезпеченні середнього класу: Cesium Entity API — 60 FPS при 500 треках, ~35 FPS при 2 000 треках, ~12 FPS при 5 000 треках. Cesium Primitive API з інстанційованим рендерингом — 60 FPS при 2 000 треках, ~45 FPS при 5 000 треках, ~28 FPS при 10 000 треках.

Mapbox GL JS: векторні тайли, власне стилізування, офлайн MBTiles

Mapbox GL JS — це WebGL-бібліотека для інтерактивних карт на основі векторних тайлів. Вона лише 2D, але чудово підходить для тактичних дисплеїв COP завдяки контролю стилю, управлінню шарами та офлайн-можливостям.

Архітектура векторних тайлів. Mapbox відображає картографічні дані з векторних тайлів — компактних двійкових файлів (формат PBF), що містять геометричні дані об'єктів без попередньо відрендерених пікселів. Рендерер застосовує правила стилю під час виконання, що означає: кольори, ширини ліній, розміри підписів та умови видимості можуть змінюватися динамічно без завантаження нових тайлів.

Підтримка офлайн MBTiles. MBTiles — це контейнерний формат на основі SQLite. Повний набір векторних тайлів для оперативної зони рівня бригади (приблизно 50 × 50 км) вміщується приблизно у 200–800 МБ. Mapbox GL JS із локальним тайл-сервером (TileServer-GL або MapTiler Server) працює без модифікацій.

Продуктивність при масштабі. Джерело GeoJSON із шаром символів: 60 FPS при 1 000 треках, ~42 FPS при 3 000 треках, ~18 FPS при 5 000 треках. Власний WebGL-шар з інстанційованим рендерингом: 60 FPS при 5 000 треках, ~50 FPS при 10 000 треках, ~35 FPS при 20 000 треків.

Власні тайл-сервери для закритих мереж

Для розгортань у закритих мережах тайл-сервер повинен бути розгорнутий всередині мережевого периметра. Два варіанти домінують: TileServer-GL та MapTiler Server.

TileServer-GL — відкритий сервер, що обслуговує сумісні з Mapbox GL векторні та растрові тайли з файлів MBTiles. Розгортається в Docker-контейнері з ~512 МБ пам'яті. Для закритих розгортань TileServer-GL зазвичай запускається за внутрішнім nginx-проксі, що застосовує автентифікацію перед запитами тайлів.

MapTiler Server Enterprise — комерційний тайл-сервер з розширеними функціями: кешування тайлів, обмеження швидкості, управління користувачами, сумісність з WMS/WMTS та підтримка динамічних шарів об'єктів на основі PostGIS.

Тести продуктивності: FPS при 1 000 / 5 000 / 10 000 рухомих об'єктах

1 000 треків: Cesium Entity API — 60 FPS. Mapbox GeoJSON — 60 FPS. Всі три варіанти прийнятні.

5 000 треків: Cesium Entity API — 12 FPS (неприйнятно). Cesium Primitive API — 45 FPS. Mapbox GeoJSON — 18 FPS (прикордонно). Mapbox власний WebGL — 58 FPS.

10 000 треків: Cesium Entity API — 4 FPS (непридатно). Cesium Primitive API — 28 FPS (прикордонно). Mapbox власний WebGL — 48 FPS. Власний WebGL-рендерер — 60 FPS.

Посібник вибору технологій: Використовуйте Cesium коли 3D-рельєф є оперативною вимогою (ППО, артилерія, планування БпЛА). Використовуйте Mapbox GL JS із власним WebGL-шаром треків коли 2D достатньо та пріоритетом є найбільша кількість треків або офлайн-гнучкість. Використовуйте власний чистий WebGL-рендерер лише коли кількість треків перевищує 20 000.