Jokainen NATOn sotilaskartan näyttö renderöi samat olennaiset asiat: omat joukot komppaniana, vihollisen panssaripataljoonan, tuntemattoman pintakontaktin, suunnitellun tulialueen. Kaksi standardia määrittää, miltä nuo asiat näyttävät — NATOn APP-6 ja Yhdysvaltain MIL-STD-2525. Niillä on yhteinen esi-isä, ne menevät päällekkäin noin yhdeksänkymmenenviiden prosentin osalta, ja ne eroavat täsmälleen niissä kohdissa, jotka rikkovat renderöijäsi. Jos rakennat C2-ohjelmistoa koalitioyleisölle, joudut ennemmin tai myöhemmin toimittamaan koodia, jonka on osattava molempia. Tämä on tekninen vertailu: alkuperä, versiokenttä, symbolin tunnistekoodi, symbolijoukot, vahvistimet, renderöinti ja muunnoksen reunatapaukset, jotka purevat.

1. kaksi standardia, yksi esi-isä

MIL-STD-2525 on Yhdysvaltain puolustusministeriön standardi yhteiselle taistelusymboliikalle. APP-6 — Allied Procedural Publication 6, julkaistu STANAG 2019:n alaisuudessa — on NATOn standardi. Ne polveutuvat samasta 1990-luvun ponnistuksesta antaa yhteisille ja yhdistetyille joukoille yksi visuaalinen kieli yhteiselle operatiiviselle kuvalle, ja suurimman osan historiastaan ne pidettiin tietoisesti samassa tahdissa. MIL-STD-2525A ja APP-6A olivat sisaruksia; 2525B linjattiin APP-6B:n kanssa. Yhdysvaltain asiakirja oli yleensä edelläkävijä, NATO ratifioi läheisesti vastaavan version vuotta tai paria myöhemmin, ja kansalliset järjestelmät toteuttivat sen kumman tahansa, jota niiden akkreditointiketju vaati.

Merkittävä haarautuminen tapahtui sukupolvien rajalla. Yhdysvallat julkaisi MIL-STD-2525C:n vuonna 2008 alkuperäisen arkkitehtuurin kypsänä päätepisteenä. NATO otti sitten johdon seuraavan sukupolven uudelleensuunnittelussa, ja molemmat yhteisöt kehittivät yhdessä uuden mallin, joka toimitettiin nimillä MIL-STD-2525D (2014) ja APP-6(D) (2017). Joten sukulinja kääntyy: vanhan sukupolven osalta Yhdysvallat johti; modernin sukupolven osalta standardit konvergoituivat uudelleen yhdessä suunnitellun mallin ympärille. Käytännön seuraus on, että 2525D ja APP-6(D) ovat paljon lähempänä tavu tavulta -vastaavuutta kuin mikään aiempi pari — mutta sinulla on yhä laaja asennettu kanta 2525C- ja APP-6(B)-järjestelmiä kentällä, jotka käyttävät täysin erilaista koodirakennetta.

2. versiokenttä

Käsittele standardeja kahtena perheenä. Vanha perhe on MIL-STD-2525B/2525C ja APP-6(A)/(B): 15-merkkinen symbolin tunnistekoodi, hierarkkinen kirjain-numero-skeema ja taisteludimensioiden ympärille järjestetty symboliluettelo. Moderni perhe on MIL-STD-2525D/2525E ja APP-6(D): 20-numeroinen numeerinen koodi, litteä symbolijoukko-arkkitehtuuri ja huomattavasti laajennettu entiteettiluettelo.

Semanttisesti linjatut parit ovat 2525C ↔ APP-6(B) vanhalla puolella ja 2525D ↔ APP-6(D) modernilla puolella. 2525E (2022) laajentaa modernia mallia lisäsymbolijoukoilla — erityisesti rikkaammilla avaruus-, kyberavaruus- ja miehittämättömien järjestelmien entiteeteillä — rikkomatta 20-numeroista rakennetta, joten APP-6(D)-renderöijä lukee useimmat 2525E-koodit oikein ja yksinkertaisesti palautuu tuntemattomaan entiteettiin uusien kohdalla. Sen tietäminen, minkä parin tietty kumppanijärjestelmä toteuttaa, on ensimmäinen kysymys, johon vastata missä tahansa integraatiossa, koska se ratkaisee, teetkö puhdasta kenttä kentältä -kuvausta vai sukupolvien välistä käännöstä.

3. SIDC-rakenne

Symbolin tunnistekoodi (SIDC) on molempien standardien sydän, ja se muuttui täysin sukupolvien välillä. Vanha SIDC on 15-merkkinen merkkijono. Positio 1 on koodausskeema, positio 2 on liittouma (ystävä, vihollinen, neutraali, tuntematon, plus oletettu/epäilty-variantit), positio 3 on taisteludimensio (ilma, maa, merenpinta, pinnanalainen, avaruus, SOF), positio 4 on tila. Positiot 5–10 ovat funktiotunnus — hierarkkinen kirjainkoodi, jossa kukin merkki kaventaa entiteettiä, joten panssaroitu mekanisoitu jalkaväkiyksikkö ja yleinen jalkaväkiyksikkö jakavat etuliitteen ja eroavat loppumerkeissä. Loput positiot kantavat symbolimuokkaajia ja portaan ilmaisinta. Se on tiivis ja ihmisluettava, kun olet opetellut sen ulkoa, mutta se on jäykkä: uusien entiteettien lisäämiseen ei jää tilaa ilman paikkojen uudelleenkäyttöä.

Moderni SIDC on 20 numeroa, puhtaasti numeerinen ja positionaalinen. Numerot 1–2 ovat versio. Numero 3 on standardin identiteettikonteksti (todellisuus, harjoitus, simulaatio). Numerot 5–6 valitsevat symbolijoukon — yksittäinen tärkein kenttä, koska se reitittää kaiken sen jälkeen tulevan. Numero 7 kantaa tilaa, 8 esikunta-/tehtäväosasto-/valekohde-ilmaisinta, 9–10 vahvistinkuvaajaa. Numerot 11–16 ovat entiteetti / entiteettityyppi / entiteettialatyyppi, kolmitasoinen numeerinen hierarkia. Numerot 17–18 ja 19–20 ovat kaksi muokkaajapaikkaa. Keskeinen oivallus jäsentäjän näkökulmasta: moderni koodi on kiinteäsiirtoinen tietue, ei jäsennetty merkkijono, mikä tekee siitä paljon helpomman validoida ja paljon vaikeamman väärinkäyttää kuin vanhan funktiotunnushierarkian.

Keskeinen oivallus: 15-merkkinen ja 20-numeroinen koodi eivät ole kaksi koodausta samasta datasta — ne ovat kaksi eri tietomallia. Vanha SIDC sulauttaa liittouman, dimension ja funktion yhdeksi hierarkkiseksi merkkijonoksi; moderni SIDC jakaa standardin identiteetin, symbolijoukon ja numeerisen entiteettihierarkian itsenäisiin kiinteälevyisiin kenttiin. Et voi muuntaa toista toiseksi regexillä. Tarvitset hakutaulukon, ja tuo taulukko on se, missä jokainen muunnosbugi elää.

4. symbolijoukot ja entiteetit

Modernissa mallissa symbolijoukko (numerot 5–6) on lähetysavain. Määritellyt joukot sisältävät ilman, ilmaohjuksen, avaruuden, avaruusohjuksen, maayksikön, maasiviilin, maakaluston, maa-asennuksen, valvontatoimet, merenpinnan, merenpinnanalaisen, miinasodankäynnin, toiminnat, signaalitiedustelun sekä useita miehittämättömiä ja kyberavaruusjoukkoja, jotka lisättiin myöhemmissä versioissa. Symbolijoukko määrittää kehyksen geometrian, sallitut entiteettikoodit ja käytettävissä olevat vahvistinkentät kaikki kerralla. Maayksikön symboli käyttää suorakulmio-/nelikulmio-kehysperhettä; merenpinnan symboli käyttää aluksen rungon kehystä; ilmasymboli käyttää puolipyöristettyä "ilma"-kehystä.

Tämä on puhtaampi erottelu kuin vanha taisteludimensiokenttä, joka yhdisti kehyksen muodon ja entiteettialueen. Modernissa mallissa kehys tulee liittoumasta plus symbolijoukosta, kun taas sisällä oleva kuvake tulee entiteettihierarkiasta. Tuo ortogonaalisuus on juuri se, mikä tekee datavetoisesta renderöijästä käytännöllisen: rakennat kehyksen kourallisesta syötteitä ja haet kuvakkeen glyfin entiteettinumeroista, itsenäisesti. Tämä on sama huolenaiheiden erottelun kuri, jota kuvaamme syväluotaavassa katsauksessamme symboliikan suunnitteluun MIL-STD-2525:llä.

5. vahvistimet ja muokkaajat

Glyfi on vain puolet sotilassymbolista. Toinen puoli on vahvistinjoukko — kehyksen ympärille sijoitetut teksti- ja grafiikkakoristeet, kirjaimitetut kentät A:sta Y:hyn standardissa. Kenttä B on porras- tai liikkuvuusilmaisin, joka piirretään kehyksen yläpuolelle (ryhmän/jaoksen pisteet, joukkueen/komppanian/pataljoonan palkit, prikaatin/divisioonan X-merkit). Kenttä T on yksilöllinen nimitys — yksikön nimi tai numero. Kenttä H on lisätietoa, kenttä W päivämäärä-aika-ryhmä, kenttä J arviointiluokitus, kenttä C lukumäärä, kenttä Q liikesuunnan nuoli, kenttä AA erityisesikunnan henkilöstöilmaisin.

Tila (läsnä vs. ennakoitu/suunniteltu) renderöidään yhtenäisenä vs. katkoviivakehyksenä — pieni yksityiskohta, jonka valtava määrä renderöijiä saa väärin, koska sen on sovelluttava kehyksen viivaan vaikuttamatta täyttöön tai kuvakkeeseen. Esikuntailmaisin laajentaa henkilöstöviivan alas kehyksestä; tehtäväosastoilmaisin kietoo kehyksen sulkeisiin; valekohde-/harhautusilmaisin lisää katkoviivaisen jatkeen. Porras, esikunta, tehtäväosasto ja tila ovat itsenäisiä lippuja modernissa SIDC:ssä, mikä tarkoittaa, että vahvistinmoottorisi on koostettava ne sen sijaan, että se vaihtaisi yhden luetteloidun symbolityypin perusteella.

6. renderöinti

Käytännössä lähes kukaan ei piirrä näitä symboleita raakoja standardi-PDF-tiedostoja käyttäen. Web-ekosysteemi on standardoinut milsymboliin, avoimen lähdekoodin JavaScript-kirjastoon, jota ylläpitää Måns Beckman ja joka generoi sotilassymbolin inline-SVG:nä suoraan SIDC:stä plus vahvistinarvojen optioobjektista. Annat sille 20-numeroisen (tai vanhan 15-merkkisen) koodin ja joukon kenttäarvoja, ja se palauttaa kerrostetun SVG:n: kehyspolun, liittouman täytön, entiteettikuvakkeen sekä ympäröivän vahvistintekstin ja -grafiikan, kunkin erillisinä elementteinä, joita voit tyylittää.

Kerrostus on se, mikä tekee siitä nopean. Koska kehys, täyttö, kuvake ja vahvistimet ovat itsenäisiä SVG-kerroksia, renderöijä voi tallentaa välimuistiin kalliit osat (entiteettikuvakkeen geometria) ja laskea uudelleen vain halvat osat (tekstivahvistimet, väri), kun jälki päivittyy. C2-mittakaavassa — tuhansia jälkiä päivittymässä useita kertoja sekunnissa — et generoi koko symbolia uudelleen jokaisessa sijaintipäivityksessä; muunnat välimuistissa olevan SVG-ryhmän ja kirjoitat uudelleen vain muuttuneen vahvistintekstin. Milsymbolin SVG-tulosteen yhdistäminen canvas- tai WebGL-symbolikerrokseen on vakiomenetelmä reaaliaikaiseen karttarenderöintiin liikkuvalla yhteisellä operatiivisella kuvalla. Milsymbol tukee sekä 2525- että APP-6-kehystyylejä yhdellä optiolla, mikä on halvin tapa tyydyttää koalitioasiakas, joka haluaa NATO-kehysvariantin Yhdysvaltain variantin sijaan.

7. keskinäismuunnoksen sudenkuopat

Vanhan 15-merkkisen SIDC:n kuvaaminen moderniksi 20-numeroiseksi koodiksi on se muunnos, jonka tulet kirjoittamaan, ja se on häviöllinen molempiin suuntiin. Liittoumakenttä kuvautuu riittävän puhtaasti — ystävällä, vihollisella, neutraalilla ja tuntemattomalla on suorat vastineensa — mutta oletettu-ystävä- ja epäilty-identiteetit sekä jokeri/feikki-harjoitusvariantit eivät kaikki selviä edestakaisesta matkasta ehjinä. Taisteludimensio on ilmaistava uudelleen symbolijoukkona, eikä se ole yksi yhteen: vanha "maa"-dimensio jakautuu maayksikön, maakaluston ja maa-asennuksen kesken modernissa mallissa, joten et voi päätellä kohdesymbolijoukkoa pelkästään dimensionumerosta — sinun on tarkastettava funktiotunnus.

Funktiotunnushierarkia on pahin rikkoja. Useilla vanhoilla entiteeteillä ei ole tarkkaa modernia vastinetta ja useilla moderneilla entiteeteillä (erityisesti uudemmilla kyberavaruus- ja miehittämättömillä joukoilla) ei ole lainkaan vanhaa koodia, joten ne taantuvat yleiseksi entiteetiksi alaspäin mennessä. Porras yleensä selviää; liikkuvuusilmaisimet joskus eivät. Turvallinen suunnitteluasenne on kantaa alkuperäinen SIDC sanatarkasti tallennettuna attribuuttina ja käsitellä muunnettua koodia renderöintiajan johdannaisena, ei koskaan järjestelmän virallisena tietueena — siten tuleva korjaus kuvaustaulukkoosi renderöi koko kuvan uudelleen ilman datamigraatiota.

8. valinta C2-tuotteellesi

Päätös koskee harvoin sitä, kumpi standardi on "parempi" — ne koodaavat saman doktriinin. Kyse on siitä, kuka kuluttaa tulostasi. Jos operaattorisi ja koalitiokumppanisi käyttävät NATO-järjestelmiä, renderöi APP-6-kehysvariantti oletuksena; jos integroidut tiiviisti Yhdysvaltain ohjelmiin, oleta MIL-STD-2525. Julkaistavuus on tärkeää tässäkin: symboliikka itsessään on luokittelematonta, mutta täyttämiesi entiteettien ja tukemiesi SIDC-varianttien tulisi seurata sitä, mitä kumppaniesi akkreditoidut järjestelmät oikeasti renderöivät, jotta et työnnä symbolia, joka näkyy tyhjänä liittolaisen näytöllä.

Hyvin ikääntyvä malli on kaksoisrenderöintistrategia: tallenna jokainen jälki sen moderni 20-numeroinen SIDC kanonisena identiteettinä, pidä kehystyylilippu (2525 vs. APP-6) näyttöasetuksena ja anna symbolikerroksen tuottaa kumpi tahansa pyynnöstä. Koska milsymbol vaihtaa kehystyylejä yhdestä optiosta, molempien tukemisen lisäkustannus on lähellä nollaa, kun tietomallisi on puhdas. Rakenna symbolijalostusketju ohuena, hyvin testattuna kuvauskerroksena yksittäisen kanonisen koodin päälle, käsittele muunnostaulukoita versioituna datana eikä kovakoodattuna logiikkana, ja imet seuraavan version — 2525F, APP-6(E) — taulukkopäivityksenä uudelleenkirjoituksen sijaan. Laajempaa arkkitehtonista kontekstia varten katso täydellinen oppaamme C2-järjestelmiin.