C2-koontinäytön karttakerros ei ole vain taustakuva, jolle symbolit sijoitetaan. Se on reaaliaikainen renderöintimoottori, jonka on käsiteltävä samanaikaisesti tuhansia dynaamisia objekteja, useita päällekkäisiä datakerroksia ja käyttäjän vuorovaikutuksia — panorointi, zoomaus, valinta — ilman, että operatiivisen kuvan päivityssykli heikkenee. Tähän kerrokseen tehdyt teknologiavalinnat määräävät, toimiiko järjestelmä operatiivisella kuormituksella vai tuleeko siitä pullonkaula, jonka ympäri operaattorit työskentelevät.
Tässä artikkelissa vertaillaan kolmea pääasiallista karttarenderöintiteknologiaa puolustuksen C2-kehityksessä — Cesium.js, Mapbox GL JS ja mukautetut tiilipalvelinkäyttöönotot — sekä vertaillaan niiden suorituskykyä jälkilukumäärillä, joilla on merkitystä: 1 000, 5 000 ja 10 000 samanaikaisesti liikkuvaa objektia.
Vaatimukset karttakerrokselle sotilaallisessa C2-järjestelmässä
Ennen teknologiavaihtoehtojen arviointia on tarpeen ilmoittaa vaatimukset tarkasti, koska sotilaalliset karttakerrosvaatimukset eroavat merkittävästi kaupallisten karttasovellusten vaatimuksista.
Objektimäärä. Taktinen C2-järjestelmä prikaatitasolla korkean intensiteetin ympäristössä seuraa 500–2 000 objektia. Teatteritason ilmapuolustusjärjestelmä seuraa 5 000–50 000 objektia ilma-, maa-, meri- ja avaruusalueilla. Karttarenderöintikerroksen on ylläpidettävä hyväksyttäviä kuvataajuuksia odotetun objektimäärän yläpäässä — ei mediaanissa.
Päivitysnopeus. Ilmajälkien on päivityttävä vähintään 1 Hz:llä (yksi sijaintipäivitys sekunnissa per jälki). Maajäljet päivittyvät 0,03–0,1 Hz:llä (joka 10–30 sekunnissa). 1 000 ilmajäljellä 1 Hz:llä päivittyessä renderer vastaanottaa 1 000 sijaintipäivitystä sekunnissa, joista jokaisen on heijastuttava seuraavaan renderoituun kuvaan. Eräpäivitysmekanismit, ei yksittäisten objektien uudelleenrenderöintilaukaisijat, ovat välttämättömiä.
3D-maastovaatimus. Maavoimien C2:lle 2D-ylhäältä alaspäin -kartta riittää. Ilmapuolustukseen, tykistön tulenhallintaan ja UAV-tehtäväsuunnitteluun tarkka 3D-maasto on operatiivinen vaatimus — sitoutumigeometria riippuu siitä. Karttakerroksen on tuettava korkeusdatan visualisointia joko varjostuksen (pseudovaikutelma 2D-projektiossa) tai todellisen 3D-maastorenderöinnin kautta korkeustarkkuudella.
Luokiteltujen verkkojen rajoitukset. Kaikki karttatiedot — satelliittikuvat, maastokorkeustiedot, vektoriominaisuudet, paikannimet — on palveltava luokitellun verkon kehästä sisältä. Ulkoiset CDN- tai API-kutsut eivät ole sallittuja. Karttarenderöintikirjaston on toimittava täysin paikallisesti palveltujen tiilisarjojen kanssa ilman toimintahäiriöitä.
Cesium.js: edut 3D-puolustusvisualisoinnissa
Cesium.js on avoimen lähdekoodin JavaScript-kirjasto 3D-globeille ja 2D-kartoille, alun perin kehitetty satelliitti- ja avaruusmissioiden visualisointiin ja sittemmin laajalti omaksuttu puolustussovelluksissa, jotka vaativat tarkkaa 3D-maanmallinnusta. Sen tekniset perusteet tekevät siitä oletusvalinnan tilanteisiin, jotka vaativat korkeustarkkaa objektien sijoittamista.
Globetila ja ellipsoidaalinen tarkkuus. Cesium renderöi Maapallon WGS84-ellipsoidina, mikä tarkoittaa, että objektien sijainnit sijoitetaan geodetisesti tarkalle korkeudelle. Ilmajälki 10 000 jalan korkeudella renderöidään 10 000 jalkaa maastopinnan yläpuolelle, ei 2D-symbolina tasaisella kartalla. Ilmapuolustuksessa ja pitkän kantaman tulenhallinnassa tämä ei ole esteettinen valinta — se on operatiivinen vaatimus.
Cesium Ion ja omaistettu maasto. Cesium Ion on pilvipalvelu, joka tarjoaa maaston ja ilmakuvat. Luokiteltujen verkkojen käyttöönotoissa Ion-palvelu korvataan omaistetulla versiolla: kvantisoitu-mesh-maasto ja kuvatiilет ladataan etukäteen paikalliselle palvelimelle, ja Cesium konfiguroidaan osoittamaan paikalliseen palvelimeen. Kvantisoitu-mesh-muoto on avoin standardi; maastotiiliet voidaan tuottaa korkeusdatasta (DTED, SRTM tai kansallisesti luokitellut DEM:t) avoimen lähdekoodin työkaluilla kuten quantized-mesh-terrain tai CTB.
3D Tiles ja Entity API. Cesiumin 3D Tiles -muoto mahdollistaa suurten 3D-tietojoukkojen virtauksen — kaupunkirakennusmallit, lentokenttämallit, maastopiirremallit — LOD-hallinnalla rendererissä. Entity API tarjoaa korkean tason rajapinnan jälkien sijoittamiseen globelle: entiteetillä on sijainti, symboli (mainosteksti tai malli), suuntaus ja valinnaisesti polyline-jälki. Kohtuullisilla jälkilukumäärillä (alle 2 000) Entity API on riittävä; korkeammilla lukumäärillä Primitive API instanssirenderöinnillä on vaatimus hyväksyttävälle suorituskyvylle.
Suorituskyky mittakaavassa. Testaus keskiluokan laitteistolla (Intel Core i7-12700, NVIDIA RTX 3060): Cesium Entity API ylläpitää 60 FPS:ää 500 jäljellä, putoaa noin 35 FPS:ään 2 000 jäljellä 1 Hz päivityksillä ja muuttuu hyväksymättömäksi (noin 12 FPS) 5 000 jäljellä. Vaihto Cesium Primitive API:iin instanssirenderöinnillä: 60 FPS 2 000 jäljellä, noin 45 FPS 5 000 jäljellä, noin 28 FPS 10 000 jäljellä. Korkean jälkilukumäärän tilanteissa Cesium vaatii mukautettua matalan tason renderöintikoodia, ei vakiorajapintaa.
Mapbox GL JS: vektoritiilet, mukautettu tyylittely, offline MBTiles
Mapbox GL JS on WebGL-pohjainen JavaScript-kirjasto interaktiivisille vektoritiilikartoille. Se on vain 2D, mutta loistaa tyylinhallinnassa, kerrostenhallinnassa ja offline-kyvyssä, jotka ovat kriittisiä 2D-taktisille COP-näytöille.
Vektoritiiliarkkitehtuuri. Mapbox renderöi karttatiedot vektoritiileistä — kompakteista binääritiedostoista (PBF-muoto), jotka sisältävät geometriset ominaisuustiedot ilman esirenderoituja pikseleitä. Renderer soveltaa tyyliohjeita ajonaikaisesti, mikä tarkoittaa, että värit, viivan leveydet, etikettikoot ja näkyvyysehdot voidaan muuttaa dynaamisesti hakematta uusia tiileitä. C2-koontinäytölle, jossa operaattori vaihtaa päivä/yö-tilojen välillä tai säätää kerrosten näkyvyyttä, tämä on merkittävä käytännön etu.
Offline MBTiles -tuki. MBTiles on SQLite-pohjainen säilömuoto, joka pakkaa tuhannet tiilitiedostot yhteen tiedostoon mahdollistaen offline-karttakäyttöönotot. Täydellinen vektoritiilisarja prikaatitason operatiiviselle alueelle (noin 50 × 50 km z14-resoluutiolla) mahtuu noin 200–800 Mt:iin. Mapbox GL JS paikallisella tiilipalvelimella (TileServer-GL tai MapTiler Server) toimii muutoksitta MBTiles-lähteestä. Rasteriilmakuvat samassa mittakaavassa vaativat huomattavasti enemmän tallennustilaa (10–50 Gt satelliittikuville z17:llä), mutta offline-rasteri on tuettu samalla mekanismilla.
Mukautetut GeoJSON-kerrokset jäljille. Mapbox GL JS:ssä liikkuvat jäljet renderöidään GeoJSON-lähteillä mukautetuilla symboli- tai ympyräkerroksilla. GeoJSON-ominaisuuskokoelma päivitettynä map.getSource('tracks').setData(newGeoJSON) kautta käynnistää kaikkien jälkisymbolien uudelleenrenderöinnin yhdellä kutsulla. Noin 5 000 jäljelle saakka tämä malli ylläpitää 30–60 FPS kykenevällä laitteistolla. Yli 5 000 jäljellä mukautettu WebGL-kerros (käyttäen Mapboxin CustomLayerInterface:a) instanssirenderöinnillä on vaatimus hyväksyttävälle suorituskyvylle.
Suorituskyky mittakaavassa. GeoJSON-lähde symbolikerroksella: 60 FPS 1 000 jäljellä (1 Hz päivitykset), noin 42 FPS 3 000 jäljellä, noin 18 FPS 5 000 jäljellä koko symbolirenderöinnillä. Mukautettu WebGL-kerros instanssirenderöinnillä: 60 FPS 5 000 jäljellä, noin 50 FPS 10 000 jäljellä, noin 35 FPS 20 000 jäljellä keskiluokan laitteistolla. Mukautettu WebGL-lähestymistapa vaatii instanssirenderin kehittämistä — noin 400–600 riviä WebGL-koodia — mutta tarjoaa suorituskyvyn, joka ylittää sekä Cesiumin että Mapboxin vakiotarjonnan.
Mukautetut tiilipalvelimet luokitelluille verkoille
Sekä Cesium että Mapbox GL JS ovat kirjastoja, jotka renderöivät tiileitä — ne eivät tuota tiileitä. Luokiteltujen verkkojen käyttöönotoissa tiilipalvelin on käyttöönottettava verkon kehän sisälle tarjoamaan pohjakartan tiilejä. Kaksi vaihtoehtoa hallitsevat puolustuskäyttöönottoja: TileServer-GL ja MapTiler Server.
TileServer-GL. TileServer-GL on avoimen lähdekoodin palvelin, joka tarjoaa Mapbox GL -yhteensopivia vektori- ja rasteritiilejä MBTiles-tiedostoista. Se voidaan käyttöönottaa Docker-kontissa noin 512 Mt muistijalanjäljellä, tukee useita samanaikaisia tiililähteitä ja sisältää sisäänrakennetun tyylirendererin palvelinpuolen rasteri tiilientuottamiseen vektorilähteistä. Luokitelluissa käyttöönotoissa TileServer-GL toimii tyypillisesti sisäisen nginx-käänteisproxyN takana, joka valvoo todennuksen ennen tiilipyyntöjen pääsyä palvelimelle.
MapTiler Server Enterprise. MapTiler Server on kaupallinen tiilipalvelin parannetuilla ominaisuuksilla laajan mittakaavan käyttöönotoille: tiilivälimuisti, nopeuden rajoittaminen, käyttäjähallinta, WMS/WMTS-yhteensopivuus GIS-järjestelmien integraatioon ja PostGIS-tuetut dynaamiset ominaisuuskerrokset. Kansallisella tai teatteritasolla, jossa tiilisarja kattaa koko maan tai alueen ja sen on palveltava satoja samanaikaisia asiakkaita, MapTiler Serverin välimuistiarkkitehtuuri tarjoaa merkittävän suorituskykyedun TileServer-GL:ään verrattuna.
Luokiteltujen tiileiden tuottaminen. Ohjelmissa, joissa käytetään luokiteltuja maantieteellisiä tietoja (luokitellut DEM:t, luokitellut ominaisuustietokannat), tiilienluontivaihe itsessään on tapahduttava luokitellussa ympäristössä. Vakiotyökalut toimivat: GDAL rasteri tiilientuottamiseen, Tippecanoe vektori tiilientuottamiseen GeoJSON:sta ja CTB maasto tiilientuottamiseen korkeusdatasta. Tuloksena saadut MBTiles-tiedostot siirretään operatiiviseen käyttöönottoon hyväksyttyjen mediansirtomenettelyjen kautta.
Suorituskyvyn vertailutulokset: FPS 1 000 / 5 000 / 10 000 liikkuvalla objektilla
Seuraavat vertailutulokset mitattiin keskiluokan työasemalla (Intel Core i7-12700, NVIDIA RTX 3060, 32 Gt RAM) käyttäen Chrome 124:ää Windows 11:ssa. Kaikki jäljet päivittyvät 1 Hz:llä sijainti- ja suuntamuutoksilla.
1 000 jälkeä: Cesium Entity API — 60 FPS. Mapbox GeoJSON-kerros — 60 FPS. Mapbox mukautettu WebGL — 60 FPS. Kaikki kolme vaihtoehtoa ovat toimivia; valinta ohjautuu 2D vs 3D -vaatimuksesta.
5 000 jälkeä: Cesium Entity API — 12 FPS (hyväksymätön). Cesium Primitive API (instanssiroitu) — 45 FPS (hyväksyttävä). Mapbox GeoJSON-kerros — 18 FPS (marginaalinen). Mapbox mukautettu WebGL — 58 FPS (erinomainen).
10 000 jälkeä: Cesium Entity API — 4 FPS (käyttökelvoton). Cesium Primitive API (instanssiroitu) — 28 FPS (marginaalinen ilmapuolustukseen). Mapbox GeoJSON-kerros — 8 FPS (käyttökelvoton). Mapbox mukautettu WebGL — 48 FPS (hyvä). Mukautettu puhdas WebGL-renderer (OpenLayers-pohja) — 60 FPS (erinomainen).
Vertailutuloksen johtopäätös on selvä: sekä Cesiumin että Mapbox GL JS:n oletusrajapinnat eivät ole suunniteltu teatteritason sotilaallisten järjestelmien vaatimille jälkilukumäärille. Hyväksyttävä suorituskyky yli 5 000 jäljellä vaatii mukautettua matalan tason WebGL-renderöintikoodia riippumatta siitä, kumpaa kirjastoa käytetään pohjakarttana.
Teknologian valintaopas: Käytä Cesiumia, kun 3D-maasto on operatiivisesti vaatimus (ilmapuolustus, tykistö, UAV-suunnittelu). Käytä Mapbox GL JS:ää mukautetulla WebGL-jälkikerroksella, kun 2D riittää ja korkein jälkilukumäärä tai offline-käyttöönottojoustavuus on ensisijainen vaatimus. Käytä mukautettua puhdasta WebGL-rendereriä vain, kun jälkilukumäärät ylittävät 20 000 eikä mikään valmis kirjasto saavuta vaadittua FPS:ää.