De kaartlaag van een C2-dashboard is niet slechts een achtergrondafbeelding waarover symbolen worden gepositioneerd. Het is een real-time renderingengine die gelijktijdig duizenden dynamische objecten, meerdere overlappende datalagen en gebruikersinteracties moet verwerken — pannen, inzoomen, selecteren — zonder de updatecyclus te vertragen die het operationele beeld actueel houdt. De technologiekeuzes voor deze laag bepalen of het systeem functioneert onder operationele belasting of een knelpunt wordt dat operators omzeilen.
Dit artikel vergelijkt de drie belangrijkste kaartrendering-technologieën die worden gebruikt in defensie-C2-ontwikkeling — Cesium.js, Mapbox GL JS en aangepaste tegelserverimplementaties — en benchmarkt hun prestaties bij de trackaantallen die ertoe doen: 1.000, 5.000 en 10.000 gelijktijdig bewegende objecten.
Vereisten voor de Kaartlaag in Militaire C2
Voordat technologieopties worden beoordeeld, is het noodzakelijk de vereisten nauwkeurig te bepalen, omdat militaire kaartlaagvereisten aanzienlijk verschillen van die van commerciГ«le kaarttoepassingen.
Aantal objecten. Een tactisch C2-systeem op brigaadeniveau in een hoog-intensieve omgeving volgt 500–2.000 objecten. Een theater-luchtverdedigingssysteem volgt 5.000–50.000 objecten in lucht-, grond-, maritieme en ruimtedomeinen. De kaartrenderende laag moet acceptabele framerates handhaven aan de bovenkant van het verwachte aantal objecten — niet bij het gemiddelde.
Updatefrequentie. Luchttracks moeten bijwerken met 1 Hz of beter (één positie-update per seconde per track). Grondtracks werken bij met 0,03–0,1 Hz (elke 10–30 seconden). Bij 1.000 luchttracks die bijwerken met 1 Hz ontvangt de renderer 1.000 positie-updates per seconde, die elk in het volgende gerenderde frame moeten worden weergegeven. Gegroepeerde updatemechanismen, niet per-object herschijftriggers, zijn essentieel.
Vereiste 3D-terrein. Voor grondtroepen-C2 is een 2D bovenaanzichtskaart voldoende. Voor luchtverdediging, artilleriebrandsturing en UAV-missieplanning is nauwkeurig 3D-terrein een operationele vereiste — de aanvalsgeometrie hangt ervan af. De kaartlaag moet visualisatie van hoogtedata ondersteunen, hetzij via hillshade (pseudo-3D uiterlijk op een 2D-projectie) of echte 3D-terreinrendering met hoogtenauwkeurige objectplaatsing.
Beperkingen van gerubriceerde netwerken. Alle kaartgegevens — satellietbeelden, terreinhoogte, vectorkenmerken, plaatsnamen — moeten worden geleverd vanuit het gerubriceerde netwerkperimeter. Geen externe CDN- of API-aanroepen zijn toegestaan. De kaartrenderende bibliotheek moet functioneren met een volledig lokaal geservde tegelset zonder verminderde functionaliteit.
Cesium.js: Voordelen voor 3D Defensievisualisatie
Cesium.js is een open-source JavaScript-bibliotheek voor 3D-globes en 2D-kaarten, oorspronkelijk ontwikkeld voor satelliet- en ruimtemissievisualisatie en vervolgens breed geadopteerd in defensietoepassingen die nauwkeurige 3D-aardmodellering vereisen. De technische grondslagen maken het de standaardkeuze voor scenario's die hoogtenauwkeurige objectplaatsing vereisen.
Globe-modus en ellipsoïdische nauwkeurigheid. Cesium rendert de Aarde als een WGS84-ellipsoïde, wat betekent dat objectposities worden geplaatst met geodetisch nauwkeurige hoogte. Een luchttrack op 3.000 meter hoogte wordt 3.000 meter boven het terreinoppervlak gerenderd, niet als een 2D-symbool op een platte kaart. Voor luchtverdediging en langeafstandsbrandsturingstoepassingen is dit geen esthetische keuze — het is operationeel vereist.
Cesium Ion en zelf-gehoste terrein. Cesium Ion is de cloudservice die terrein en beelden levert. Voor gerubriceerde netwerkimplementaties wordt de Ion-service vervangen door een zelf-gehoste instantie: kwantiseer-mesh terreintegels en beeldtegels worden vooraf gedownload naar een lokale server, en Cesium wordt geconfigureerd om naar de lokale server te verwijzen. Het kwantiseer-mesh-formaat is een open standaard; terreintegels kunnen worden gegenereerd uit hoogtedata (DTED, SRTM of nationaal-gerubriceerde DEMs) met open-source tools zoals quantized-mesh-terrain of CTB (Cesium Terrain Builder).
3D Tiles en Entity API. Cesiums 3D Tiles-formaat maakt streaming mogelijk van grote 3D-datasets — stedelijke gebouwmodellen, vliegveldmodellen, terreinkenmerkenmodellen — met LOD-beheer (level of detail) dat door de renderer wordt afgehandeld. De Entity API biedt een high-level interface voor het plaatsen van tracks op de globe: een entiteit heeft een positie, een symbool (billboard of model), een oriëntatie en optioneel een polylijnspoor. Bij gematigde trackaantallen (minder dan 2.000) is de Entity API adequaat; bij hogere aantallen is de Primitive API met geïnstantieerde geometrie vereist voor acceptabele prestaties.
Prestaties op schaal. Testen op mid-range hardware (Intel Core i7-12700, NVIDIA RTX 3060): Cesium Entity API handhaaft 60 FPS bij 500 tracks, daalt naar ~35 FPS bij 2.000 tracks met 1 Hz-updates, en wordt onaanvaardbaar (~12 FPS) bij 5.000 tracks. Overschakelen naar Cesium Primitive API met instantierendering: 60 FPS bij 2.000 tracks, ~45 FPS bij 5.000 tracks, ~28 FPS bij 10.000 tracks. Voor hoog-trackaantal-scenario's vereist Cesium aangepaste low-level renderingcode, niet de standaard-API.
Mapbox GL JS: Vectortegels, Aangepaste Styling, Offline MBTiles
Mapbox GL JS is een WebGL-gebaseerde JavaScript-bibliotheek voor interactieve vectortegelkaarten. Het is uitsluitend 2D maar blinkt uit in de stijlcontrole, laagbeheer en offline-mogelijkheid die cruciaal zijn voor 2D tactische COP-weergaven.
Vectortegelarchitectuur. Mapbox rendert kaartdata vanuit vectortegels — compacte binaire bestanden (PBF-formaat) die geometrische featuredata bevatten zonder vooraf gerenderde pixels. De renderer past stijlregels toe bij runtime, wat betekent dat kleuren, lijnbreedten, labelgroottes en zichtbaarheidsomstandigheden dynamisch kunnen worden gewijzigd zonder nieuwe tegels op te halen. Voor een C2-dashboard waarbij de operator schakelt tussen dag-/nachtmodi of laagzichtbaarheid aanpast, is dit een aanzienlijk praktisch voordeel.
Offline MBTiles-ondersteuning. MBTiles is een SQLite-gebaseerd containerformaat dat duizenden tegelbestanden verpakt in één bestand, waardoor offline kaartimplementaties mogelijk worden. Een complete vectortegelset voor een operatiegebied op brigaadeniveau (circa 50 × 50 km op z14-resolutie) past in circa 200–800 MB. Mapbox GL JS, geserveerd met een lokale tegelserver (TileServer-GL of MapTiler Server), werkt zonder aanpassing vanuit een MBTiles-bron. Rasterbeelden op dezelfde schaal vereisen aanzienlijk meer opslag (10–50 GB voor satellietbeelden op z17), maar offline raster wordt via hetzelfde mechanisme ondersteund.
Aangepaste GeoJSON-lagen voor tracks. In Mapbox GL JS worden bewegende tracks gerenderd met GeoJSON-bronnen met aangepaste symbool- of cirkellagen. Een GeoJSON-feature-collectie die wordt bijgewerkt via map.getSource('tracks').setData(newGeoJSON) triggert een herschijving van alle tracksymbolen in één aanroep. Voor trackaantallen tot circa 5.000 handhaaft dit patroon 30–60 FPS op geschikte hardware. Boven 5.000 tracks is een aangepaste WebGL-laag (via Mapbox's CustomLayerInterface) met instantierendering vereist om acceptabele prestaties te handhaven.
Prestaties op schaal. GeoJSON-bron met symboollaag: 60 FPS bij 1.000 tracks (1 Hz-updates), ~42 FPS bij 3.000 tracks, ~18 FPS bij 5.000 tracks met volledige symboolrendering. Aangepaste WebGL-laag met instantierendering: 60 FPS bij 5.000 tracks, ~50 FPS bij 10.000 tracks, ~35 FPS bij 20.000 tracks op mid-range hardware. De aangepaste WebGL-aanpak vereist het ontwikkelen van een geïnstantieerde renderer — circa 400–600 regels WebGL-code — maar levert prestaties die zowel Cesium als Mapbox out of the box overtreffen.
Aangepaste Tegelservers voor Gerubriceerde Netwerken
Zowel Cesium als Mapbox GL JS zijn bibliotheken die tegels renderen — ze produceren geen tegels. Voor gerubriceerde netwerkimplementaties moet een tegelserver worden ingezet binnen het netwerkperimeter om de basiskaarttegels te serveren. Twee opties domineren defensie-implementaties: TileServer-GL en MapTiler Server.
TileServer-GL. TileServer-GL is een open-source server die Mapbox GL-compatibele vector- en rastertegels levert vanuit MBTiles-bestanden. Het kan worden geГЇmplementeerd in een Docker-container met een geheugenvoetafdruk van circa 512 MB, ondersteunt meerdere gelijktijdige tegelbronnen en bevat een ingebouwde stijlrenderer voor server-side rastertegelgeneratie vanuit vectorbronnen. Voor gerubriceerde implementaties wordt TileServer-GL doorgaans achter een interne nginx reverse proxy uitgevoerd die authenticatie afdwingt voordat tegelverzoeken de tegelserver bereiken.
MapTiler Server Enterprise. MapTiler Server is een commerciГ«le tegelserver met uitgebreide functies voor grootschalige implementaties: tegelcaching, snelheidsbegrenzing, gebruikersbeheer, WMS/WMTS-compatibiliteit voor integratie met GIS-systemen, en ondersteuning voor PostGIS-ondersteunde dynamische feature-lagen. Op nationaal of theaterniveau, waar de tegelset een heel land of regio bestrijkt en honderden gelijktijdige clients moet bedienen, biedt de cachingarchitectuur van MapTiler Server een zinvolle prestatieverbetering ten opzichte van TileServer-GL.
Gerubriceerde tegels genereren. Voor programma's die gerubriceerde geografische data gebruiken (gerubriceerde DEMs, gerubriceerde feature-databases), moet de tegelgeneratiestap zelf plaatsvinden in een gerubriceerde omgeving. Standaardtools werken: GDAL voor rastertegelgeneratie, Tippecanoe voor vectortegelgeneratie vanuit GeoJSON, en CTB voor terreintegelgeneratie vanuit hoogtedata. De uitvoer-MBTiles-bestanden worden vervolgens via goedgekeurde mediatransferprocedures overgedragen naar de operationele implementatie.
Prestatiesbenchmarks: FPS bij 1.000 / 5.000 / 10.000 Bewegende Objecten
De volgende benchmarks werden gemeten op mid-range werkstationhardware (Intel Core i7-12700, NVIDIA RTX 3060, 32 GB RAM) met Chrome 124 op Windows 11. Alle tracks werken bij met 1 Hz met positie- en koerswijzigingen.
1.000 tracks: Cesium Entity API — 60 FPS. Mapbox GeoJSON-laag — 60 FPS. Mapbox aangepaste WebGL — 60 FPS. Alle drie opties zijn haalbaar; de keuze wordt bepaald door de 2D vs 3D-vereiste.
5.000 tracks: Cesium Entity API — 12 FPS (onaanvaardbaar). Cesium Primitive API (geïnstantieerd) — 45 FPS (acceptabel). Mapbox GeoJSON-laag — 18 FPS (marginaal). Mapbox aangepaste WebGL — 58 FPS (uitstekend).
10.000 tracks: Cesium Entity API — 4 FPS (onbruikbaar). Cesium Primitive API (geïnstantieerd) — 28 FPS (marginaal voor luchtverdediging). Mapbox GeoJSON-laag — 8 FPS (onbruikbaar). Mapbox aangepaste WebGL — 48 FPS (goed). Aangepaste pure-WebGL-renderer (OpenLayers basis) — 60 FPS (uitstekend).
De benchmarkconclusie is duidelijk: de standaard-API's van zowel Cesium als Mapbox GL JS zijn niet ontworpen voor de trackaantallen die militaire systemen op theaterniveau vereisen. Acceptabele prestaties bij 5.000+ tracks vereisen aangepaste low-level WebGL-renderingcode, ongeacht welke bibliotheek de basiskaart levert.
Technologieselectiegids: Gebruik Cesium wanneer 3D-terrein operationeel vereist is (luchtverdediging, artillerie, UAV-planning). Gebruik Mapbox GL JS met een aangepaste WebGL-tracklaag wanneer 2D voldoende is en het hoogste trackaantal of offline implementatieflexibiliteit de primaire vereiste is. Gebruik een aangepaste pure-WebGL-renderer alleen wanneer trackaantallen meer dan 20.000 bedragen en geen kant-en-klare bibliotheek de vereiste FPS haalt.