Cursor on Target (CoT) on XML-pohjainen viestiformaatti, jonka Yhdysvaltain ilmavoimien tutkimuslaboratorio kehitti 2000-luvun alussa ratkaisemaan tietyn ongelman: miten jakaa kohteen tai yksikön sijainti, identiteetti ja tila heterogeenisten sotilasjärjestelmien välillä, joita ei ole suunniteltu yhteentoimiviksi? CoT:n vastaus oli minimaalinen, laajennettavissa oleva XML-skeema, jota mikä tahansa järjestelmä voi tuottaa ja kuluttaa ilman keskitettyä rekisteriä tai koordinointiauktoriteettia.
Kaksi vuosikymmentä myöhemmin CoT:sta on tullut tosiasiallinen standardi sijaintiraportoinnille ja tapahtumien jakamiselle taktisessa reunaekosysteemissä. ATAK (Android Team Awareness Kit), WinTAK, iTAK, TAK Server ja sadat laajennukset ja räätälöidyt integraatiot puhuvat kaikki CoT:ta.
Mitä CoT on ja miten siitä tuli tosiasiallinen standardi
CoT saavutti hallitsevuuden ei muodollisen standardointiprosessin vaan operatiivisen hyödyllisyyden ajaman orgaanisen käyttöönoton kautta. ATAK:n CoT:n käyttöönotto omana sisäisenä ja ulkoisena dataformaattina oli kriittinen mahdollistava tekijä. ATAK:sta tuli hallitseva jalkautuneelle sotilaalle tarkoitettu tilannetietoisuussovellus, ja koska kaikki ATAK:n tuottama on CoT-tapahtuma, kaikkien ATAK:n kanssa integroituvien järjestelmien on puhuttava CoT:ta.
XML-rakenne: Tapahtuma-, piste- ja yksityiskohta-elementit
CoT-viesti on XML-dokumentti yhdellä juurielementillä: <event>. Jokainen CoT-viesti on tapahtuma riippumatta siitä, kuvaako se sijaintipäivitystä, anturiraporttia, chat-viestiä vai tehtävää. Tapahtuma-elementti kantaa useita pakollisia attribuutteja, jotka tunnistavat tapahtumatyypin, lähteen ja aikaikkuna.
Minimaalinen CoT-sijaintiraportti näyttää tältä:
<event version="2.0"
uid="ALPHA-1-1"
type="a-f-G-U-C"
how="m-g"
time="2026-05-11T08:30:00.000Z"
start="2026-05-11T08:30:00.000Z"
stale="2026-05-11T08:31:00.000Z">
<point lat="48.3794"
lon="31.1656"
hae="150.0"
ce="10.0"
le="5.0"/>
<detail>
<contact callsign="ALPHA-1-1"/>
<group name="Cyan" role="Team Member"/>
<status battery="85"/>
<track speed="0.0" course="270.0"/>
</detail>
</event>
Tärkeimpien attribuuttien purkaminen:
uid: Maailmanlaajuisesti yksilöllinen tunniste raportoitavalle kokonaisuudelle. UID pysyy samana kaikissa saman kokonaisuuden raporteissa.
type: Hierarkkinen merkkijono, joka koodaa kokonaisuuden luokituksen. Tyyppimerkkijono käyttää pistehierarkiaa: ensimmäinen merkki koodaa affiliaatioalueen (a = atomit, eli fyysiset kokonaisuudet), toinen segmentti koodaa affiliaation (f = ystävällinen, h = vihamielinen, n = neutraali, u = tuntematon), kolmas segmentti koodaa toimialueen (G = maa, A = ilma, S = meri).
time / start / stale: Kolme ISO 8601 UTC -aikaleimaa, jotka määrittelevät milloin tapahtuma luotiin (time), milloin raportoitu tila tuli voimaan (start), ja milloin raportti on katsottava vanhentuneeksi (stale). Vanhentumisaika on kriittinen – kuluttajan tulee lopettaa kokonaisuuden näyttäminen tai alentaa sen visuaalista luottamusta, kun nykyinen aika ylittää vanhentumisaikaleiman.
point: Kokonaisuuden sijainti WGS84-koordinaateissa. lat ja lon ovat desimaaliasteissa. hae on korkeus WGS84-ellipsoidin yläpuolella metreinä (ei korkeus merenpinnan yläpuolella). ce ja le ovat ympyrävirhe ja lineaarivirhe.
detail: Laajennettavissa oleva XML-elementti, joka kantaa sovelluskohtaista dataa. TAK-ekosysteemi määrittelee joukon tunnettuja yksityiskohdan alielementtejä (contact, group, status, track, precisionlocation), jotka ATAK tunnistaa ja näyttää.
CoT-tyypit: Luokitushierarkia
a-f-G (Ystävällinen maa): Ystävällinen maayksikkö. Renderöidään sinisellä suorakulmiolla MIL-STD-2525:n mukaan.
a-h-G (Vihamielinen maa): Vihamielinen maayksikkö. Renderöidään punaisella vinoneliöllä.
a-u-G (Tuntematon maa): Tuntematon affiliaation maakontakti. Renderöidään keltaisella kysymysmerkillä.
a-f-A (Ystävällinen ilma): Ystävällinen ilmajäljitys. Käytetään ystävällisille UAV:ille, helikoptereille ja kiinteäsiipialusten konetyyppien jäljityksiin.
b-m-p-s-p-loc: Tehtäväsuunnittelun välipiste – osa lähetys-/hallintatyyppihierarkiaa. Käytetään reittien suunnitteluun ja tehtäväkerrosten jakamiseen.
t-x-c-t: GeoChat-viesti. ATAK käyttää CoT:ta tekstiviestien välittämiseen käyttäjien välillä.
TAK Server: Reititys, suodatus ja federaatio
TAK Server on TAK-ekosysteemin palvelinpuolen komponentti. Se vastaanottaa CoT-viestejä yhdistyneiltä asiakkailta (ATAK-laitteet, WinTAK-instanssit, räätälöidyt integraatiot) ja reitittää ne muille yhdistyneille asiakkaille konfiguroitavien sääntöjen perusteella.
Federaatio yhdistää useita TAK Server -instansseja, mahdollistaen CoT-tapahtumien virtauksen palvelininstanssien välillä eri maantieteellisissä sijainneissa tai eri turvallisuustasoilla.
Toteutus Pythonilla: CoT:n jäsennys ja luonti
Python-ekosysteemissä on useita CoT-kirjastoja. pytak-kirjasto (TAK-yhteisön ylläpitämä) tarjoaa täydellisen toteutuksen CoT-tapahtumien luomiseen.
import uuid
from datetime import datetime, timezone, timedelta
import xml.etree.ElementTree as ET
def generate_cot_position(uid, callsign, lat, lon, hae, affiliation="f", domain="G"):
now = datetime.now(timezone.utc)
stale = now + timedelta(minutes=1)
fmt = "%Y-%m-%dT%H:%M:%S.000Z"
event = ET.Element("event", {
"version": "2.0",
"uid": uid,
"type": f"a-{affiliation}-{domain}-U-C",
"how": "m-g",
"time": now.strftime(fmt),
"start": now.strftime(fmt),
"stale": stale.strftime(fmt)
})
ET.SubElement(event, "point", {
"lat": str(lat),
"lon": str(lon),
"hae": str(hae),
"ce": "10.0",
"le": "5.0"
})
detail = ET.SubElement(event, "detail")
ET.SubElement(detail, "contact", {"callsign": callsign})
ET.SubElement(detail, "track", {"speed": "0.0", "course": "0.0"})
return ET.tostring(event, encoding="unicode")
Vanhentumisajan ohje: Aseta vanhentumisaika noin 2-kertaiseksi kokonaisuustyypin odotettuun päivitysväliin. Jalkautuneelle sotilaalle, joka päivittyy joka 30 sekunnissa, vanhentumisajan tulisi olla 60 sekuntia. UAV:lle, joka päivittyy 1 Hz:llä, vanhentumisajan tulisi olla 5–10 sekuntia.