Кожне повідомлення Cursor on Target (CoT) — це один XML-документ, кореневий елемент якого, <event>, несе код типу, унікальний ідентифікатор, три мітки часу UTC і позицію <point>; усе інше їде всередині відкритого контейнера <detail>. Ця єдина форма переносить позиції, маркери, чат, маршрути, малюнки, тривоги та медичні запити між ATAK, WinTAK, iTAK і TAK Server. Ця сторінка — бібліотека для копіювання: анотований, синтаксично коректний CoT XML для повідомлень, якими тактичні системи реально обмінюються, з поясненням, що робить із ним клієнт TAK, який його отримав.
Про історію та дизайн формату читайте в нашому огляді формату Cursor on Target, а поелементний розбір — у глибокому зануренні в схему CoT; ця стаття свідомо лишається на рівні «покажіть мені XML». Назви елементів і атрибутів нижче звірено з публічною базовою схемою подій CoT MITRE, документацією підсхем та визначеннями типів CoT, опублікованими разом із клієнтами TAK. Позивні, UID і координати вигадані; мітки часу — ілюстративні значення ISO-8601 UTC.
Анатомія CoT-повідомлення
Мінімальна коректна подія CoT складається з семи атрибутів <event>, рівно одного <point> і, за потреби, <detail>:
<event version="2.0" uid="ANDROID-9c2f71a4" type="a-f-G-U-C" how="m-g"
time="2026-10-07T06:12:44.000Z" start="2026-10-07T06:12:44.000Z"
stale="2026-10-07T06:13:14.000Z">
<point lat="50.450112" lon="30.523398" hae="152.4" ce="4.5" le="9.0"/>
<detail>
<contact callsign="GRIF-2" endpoint="*:-1:stcp"/>
<__group name="Cyan" role="Team Member"/>
<status battery="78"/>
<takv platform="ATAK-CIV" version="5.2.0" device="Samsung SM-G975F" os="34"/>
<track speed="1.4" course="270.0"/>
<precisionlocation geopointsrc="GPS" altsrc="GPS"/>
</detail>
</event>
Що дає кожна частина на клієнті-одержувачі:
| Частина | Значення | Що з нею роблять ATAK / TAK Server |
|---|---|---|
uid | Ідентичність об'єкта, а не повідомлення | Той самий uid пересуває наявний маркер; новий uid створює новий. Видалення та скасування тривоги націлені саме на нього. |
type | Таксономія «крапка-дефіс», що описує, чим є об'єкт | Вибирає символ MIL-STD-2525 і колір приналежності; визначає серверну фільтрацію та правила федерації. |
how | Як було отримано позицію | Зважує звіт в об'єднанні даних (GPS, оцінка чи ретрансляція); ATAK показує це в деталях маркера. |
time / start / stale | Час створення та вікно чинності | Після спливання stale клієнти роблять маркер сірим, а потім вилучають його; ніхто не надсилає явного повідомлення про завершення. |
point | lat/lon (десяткові градусі WGS-84), hae (метри над еліпсоїдом), ce/le (радіуси похибки) | Розміщує маркер; ce може малювати кільце точності. Невідомі значення — службовий замінник 9999999. |
detail | Відкритий контейнер розширень | Відомі дочірні елементи (нижче) задають позивний, колір команди, батарею, вектор швидкості; невідомі дочірні елементи ігноруються, а не відхиляються. |
Три властивості <point> регулярно підводять інтеграторів. hae — висота над еліпсоїдом WGS-84, а не над середнім рівнем моря. ce і le — межі горизонтальної та вертикальної похибки з ймовірністю 1-сигма в метрах; схема вимагає їх навіть коли значення невідомі — 9999999.0 є узгодженим значенням-замінником «невідомо», і воно краще за самовпевнене 0.0. А lat/lon — знакові десяткові градусі, причому шість знаків після коми дають роздільність приблизно 0,1 м; MGRS чи UTM у CoT не передбачено.
Коди типів CoT і значення how: шпаргалка
Атрибут type — це розділений дефісами шлях таксономії, і його перший токен каже, яким видом події це є:
| Перший токен | Родина | Типові випадки |
|---|---|---|
a- | Атоми — реальні об'єкти світу | Підрозділи, техніка, літаки, поранені, інциденти |
b- | Біти — інформаційні об'єкти | Чат, маршрути, малюнки, маркери, відеоаліаси, тривоги |
t- | Завдання / керування | Пінги активності, завдання на видалення, отримання даних |
y- | Відповіді | Підтвердження, статус виконання завдань |
Для атомів другий токен — приналежність, третій — бойовий вимір; решта спускається деревом функцій MIL-STD-2525 у верхньому регістрі, а малі літери зарезервовані для розширень CoT:
| Токен | Приналежність | Токен | Бойовий вимір |
|---|---|---|---|
p | На розгляді | P | Космос |
u | Невідомий | A | Повітря |
a | Ймовірний союзник | G | Суша |
f | Свій | S | Надводна |
n | Нейтральний | U | Підводна |
s | Підозрюваний | X | Інше |
h | Ворожий | далі йдуть ID функцій 2525 у верхньому регістрі (напр., -U-C бойовий, -E-V-A-T танк) | |
Оскільки таксономія декодується за префіксом, клієнт, який розуміє лише a-h-G, усе одно намалює загальну ворожу наземну піктограму для a-h-G-E-V-A-T. Поширені рядки з реального трафіку: a-f-G-U-C (дружній наземний бойовий — типовий тип пристрою ATAK), a-f-A-M-F-Q / a-f-A-M-H-Q (дружній БпЛА із фіксованим / гвинтовим крилом), a-u-G (невідомий наземний), b-m-p-s-m (маркер spot map), b-t-f (GeoChat), b-m-r (маршрут), b-r-f-h-c (медичний запит 9-line). Як піктограми відображаються символами, розібрано у відображенні символіки у TAK, а порівняння стандартів — у APP-6 проти MIL-STD-2525.
Атрибут how фіксує походження даних, і системи об'єднання даних зважують за ним звіти:
| how | Значення |
|---|---|
h-e | Оцінка, введена людиною |
h-c / h-t / h-p | Порахована людиною / переписана (голос, папір) / вставлена з іншого вікна |
h-g-i-g-o | Офіційно — «високо сумнівний трек»; на практиці ATAK штампує цим більшість вручну виставлених маркерів і GeoChat |
m-g | Згенеровано машиною з GPS (уточнення m-g-d DGPS, m-g-n INS+GPS) |
m-i / m-f / m-r | Вимірювання за зображенням / злиття з кількох джерел / передано шлюзом |
m-n / m-s / m-c | Інерціальна навігація / симуляція / конфігураційний файл |
Правила часу: time, start і stale — значення ISO 8601 UTC, що закінчуються на Z (дробові секунди необов'язкові). time — момент створення події; start–stale — вікно чинності. Встановлення stale ранішим за start — оригінальна конвенція MITRE для «скидання треку», хоча в мережах TAK надійніше працює явне завдання на видалення (нижче).
Звіти про позицію: дружній PLI і ворожі/нейтральні маркери
Приклад на початку сторінки — звіт про власну позицію (PLI): ATAK повторює його кожні кілька секунд із тим самим uid, ставить stale приблизно на два–чотири інтервали звітування плюс запас і дозволяє всім іншим клієнтам прибрати маркер, якщо оновлення припинилися. Маркери від датчиків або виставлені оператором мають ту саму форму події, але інший type і триваліший stale:
<event version="2.0" uid="E-20261007-0413" type="a-h-G-E-V-A-T" how="h-g-i-g-o"
time="2026-10-07T06:41:02.000Z" start="2026-10-07T06:41:02.000Z"
stale="2026-10-07T18:41:02.000Z">
<point lat="50.412220" lon="30.591054" hae="9999999.0" ce="25.0" le="9999999.0"/>
<detail>
<contact callsign="K-41"/>
<remarks source="BAO.F.ATAK.ANDROID-9c2f71a4">Hull-down at treeline, 2 vehicles</remarks>
<usericon iconsetpath="COT_MAPPING_2525C/a-h/a-h-G-E-V-A-T"/>
<link uid="ANDROID-9c2f71a4" type="a-f-G-U-C" relation="p-p"/>
<archive/>
</detail>
</event>
Що робить сторона-одержувач: type малює червоний ромб танка; contact/callsign стає підписом; usericon прив'язує конкретний запис набору піктограм (форма COT_MAPPING_2525C/<affiliation>/<type> — саме її видає палітра 2525 в ATAK); link relation="p-p" вказує джерело; <archive/> каже клієнтам зберегти маркер, а не погасити його разом зі спливанням stale. Невідомі контакти просто використовують a-u-G — жовта піктограма зі знаком питання з'являється без інших змін. Для звичайної кольорової крапки без 2525-кодування ATAK застосовує маркер spot map:
<event version="2.0" uid="9405e320-9356-41c4-8449-f46990aa17f8"
type="b-m-p-s-m" how="h-g-i-g-o"
time="2026-10-07T06:55:10.000Z" start="2026-10-07T06:55:10.000Z"
stale="2026-10-08T06:55:10.000Z">
<point lat="50.456090" lon="30.563750" hae="9999999.0" ce="9999999.0" le="9999999.0"/>
<detail>
<contact callsign="R 1"/>
<color argb="-65536"/>
<usericon iconsetpath="COT_MAPPING_SPOTMAP/b-m-p-s-m/-65536"/>
</detail>
</event>
Тут піктограму обирає usericon із палітри spot map і ARGB-значення кольору (32-бітове ціле зі знаком; -65536 — непрозорий червоний), а не код символіки — це зручно для дружніх анотацій, які не мають на увазі 2525-ідентичність.
Повідомлення GeoChat (b-t-f)
Чат у світі TAK — не окремий протокол: рядок GeoChat — це подія CoT типу b-t-f, текст якої лежить у <remarks>, а адресування — у <__chat>/<chatgrp>:
<event version="2.0"
uid="GeoChat.ANDROID-9c2f71a4.All Chat Rooms.3f8c2b1e-77d3-4c9a-9e21-5b0f6a2d4e88"
type="b-t-f" how="h-g-i-g-o"
time="2026-10-07T07:02:31.000Z" start="2026-10-07T07:02:31.000Z"
stale="2026-10-08T07:02:31.000Z">
<point lat="0.0" lon="0.0" hae="0.0" ce="9999999.0" le="9999999.0"/>
<detail>
<__chat id="All Chat Rooms" chatroom="All Chat Rooms" groupOwner="false"
senderCallsign="GRIF-2"
messageId="3f8c2b1e-77d3-4c9a-9e21-5b0f6a2d4e88">
<chatgrp uid0="ANDROID-9c2f71a4" uid1="All Chat Rooms" id="All Chat Rooms"/>
</__chat>
<link uid="ANDROID-9c2f71a4" type="a-f-G-U-C" relation="p-p"/>
<remarks source="BAO.F.ATAK.ANDROID-9c2f71a4"
time="2026-10-07T07:02:31.000Z">Bearing 085, treeline, over.</remarks>
</detail>
</event>
Як це читати: uid події за конвенцією — GeoChat.<sender>.<conversation>.<message-uuid>, що робить дедуплікацію при повторному відтворенні тривіальною; chatgrp/uid0 — відправник, а uid1 — призначення: UID єдиного одержувача для прямого повідомлення або назва кімнати для широкомовлення; remarks/@to несе UID одержувача в прямих повідомленнях; stale ставиться на день уперед, бо чат, на відміну від позицій, мусить переживати store-and-forward. Квитанції про доставку й прочитання повертаються типами b-t-f-d і b-t-f-r. Точка point події може прив'язати повідомлення до місця на карті; ATAK також пересилає живу позицію відправника, доки оператор її не вимкне. Повну картину store-and-forward і смуги пропускання див. у тактичному чаті та стратегії даних у TAK.
Маршрути, малюнки та лінії дальність–пеленг
Маршрут — це одна подія b-m-r, точки якої є дочірніми елементами <link> — b-m-p-w для іменованих точок маршруту, b-m-p-c для контрольних точок фігур, — за якими йде блок стилізації <link_attr>:
<event version="2.0" uid="9017073e-5658-42e7-baa8-b98f3c9c1622" type="b-m-r" how="h-e"
time="2026-10-07T07:20:00.000Z" start="2026-10-07T07:20:00.000Z"
stale="2026-10-08T07:20:00.000Z">
<point lat="0.0" lon="0.0" hae="9999999.0" ce="9999999.0" le="9999999.0"/>
<detail>
<link uid="f3acf150-d75c-407d-be43-e401ab40fe74" callsign="SP"
type="b-m-p-w" point="50.443353,-77.054400" remarks="" relation="c"/>
<link uid="820ebf04-1300-4c3a-a368-d6f1e21a5ddb" callsign=""
type="b-m-p-c" point="50.436413,-77.045642" remarks="" relation="c"/>
<link uid="f6926af1-deec-44f4-ae06-46065c829887" callsign="CP1"
type="b-m-p-w" point="50.446574,-77.040572" remarks="" relation="c"/>
<link_attr planningmethod="Infil" color="-1" method="Driving" prefix="CP"
type="Vehicle" stroke="3" direction="Infil" routetype="Primary"
order="Ascending Check Points"/>
<strokeColor value="-1"/>
<strokeWeight value="3.0"/>
<contact callsign="ROUTE ALFA"/>
<remarks></remarks>
<archive/>
<labels_on value="true"/>
</detail>
</event>
ATAK відображає список link point як геометрію маршруту, перетворює записи b-m-p-w на маркери маршрутних точок із власними позивними і читає link_attr для режиму руху (Driving|Walking|Flying|Swimming|Watercraft), напрямку (Infil|Exfil) і типу маршруту (Primary|Secondary). Власна точка point події — службовий нуль 0/0: геометрія повністю живе в detail.
Малюнки дотримуються того самого принципу «геометрія в detail». Коло — це еліпс із рівними осями всередині <shape>:
<event version="2.0" uid="6d09b6f6-720a-4eef-a197-183012512316"
type="u-d-c-c" how="h-e"
time="2026-10-07T07:35:12.000Z" start="2026-10-07T07:35:12.000Z"
stale="2026-10-08T07:35:12.000Z">
<point lat="50.437376" lon="30.572999" hae="9999999.0" ce="9999999.0" le="9999999.0"/>
<detail>
<shape>
<ellipse major="300.0" minor="300.0" angle="360"/>
<link uid="6d09b6f6-720a-4eef-a197-183012512316.Style"
type="b-x-KmlStyle" relation="p-c">
<Style>
<LineStyle><color>ffffffff</color><width>4.0</width></LineStyle>
<PolyStyle><color>96ffffff</color></PolyStyle>
</Style>
</link>
</shape>
<strokeColor value="-1"/>
<strokeWeight value="4.0"/>
<fillColor value="-1761607681"/>
<contact callsign="PATROL AREA"/>
<labels_on value="true"/>
</detail>
</event>
Точка point — це центр, major/minor — метри, а блок у стилі KML, вкладений у link із типом b-x-KmlStyle, несе штрих і заливку. Прямокутник викидає елемент shape і перелічує кути як дочірні <link point="lat,lon"/> із типом u-d-r; довільна лінія робить те саме з типом u-d-f, замикаючи полігон повторенням першої точки в кінці. Лінія дальність–пеленг — знову інша: тип u-rb-a, точка point є якорем, а вектор заданий чисельно:
<event version="2.0" uid="58df2fcd-e33e-414f-a718-b18b50cd3137"
type="u-rb-a" how="h-e"
time="2026-10-07T07:44:03.000Z" start="2026-10-07T07:44:03.000Z"
stale="2026-10-08T07:44:03.000Z">
<point lat="50.420806" lon="30.554945" hae="9999999.0" ce="9999999.0" le="9999999.0"/>
<detail>
<range value="886.14"/>
<bearing value="45.6"/>
<inclination value="0.0"/>
<rangeUnits value="1"/>
<bearingUnits value="0"/>
<northRef value="0"/>
<strokeColor value="-65536"/>
<strokeWeight value="3.0"/>
<contact callsign="R&B 1"/>
</detail>
</event>
Одиниці кодуються малими цілими числами: rangeUnits 0=км, 1=метри, 2=милі, 3=ярди, 4=фути, 5=морські милі; bearingUnits 0=градуси, 1=тисячні, 2=радіани; northRef 0=справжня північ, 1=магнітна, 2=сіткова. ATAK при імпорті перераховує положення наконечника стрілки з якоря та вектора.
Тривожні сигнали та запити CASEVAC/MEDEVAC
Маяки тривоги — маленькі термінові події: тип b-a-o-tbl для загальної тривоги 911, stale лише на десять секунд уперед (маяк ретранслюється, а не лишається висіти) і конвенція UID <device-uid>-9-1-1:
<event version="2.0" uid="ANDROID-9c2f71a4-9-1-1" type="b-a-o-tbl" how="h-g-i-g-o"
time="2026-10-07T08:01:57.000Z" start="2026-10-07T08:01:57.000Z"
stale="2026-10-07T08:02:07.000Z">
<point lat="50.448620" lon="30.531104" hae="160.0" ce="8.0" le="12.0"/>
<detail>
<link uid="ANDROID-9c2f71a4" type="a-f-G-U-C" relation="p-p"/>
<contact callsign="GRIF-2-Alert"/>
<emergency type="911 Alert">GRIF-2</emergency>
</detail>
</event>
Рядки emergency/@type і відповідні типи CoT, як їх визначає ATAK:
| Тривога | Тип CoT | Тригер у ATAK |
|---|---|---|
| 911 Alert | b-a-o-tbl | Кнопка тривоги, загальна |
| Ring The Bell | b-a-o-pan | Свідомий запит термінової уваги |
| In Contact | b-a-o-opn | Підрозділ у контакті з противником |
| Geo-fence Breached | b-a-g | Трек входить до геозони моніторингу або покидає її |
| Custom | b-a-o-c | Визначається плагіном |
| Cancel Alert | b-a-o-can | Оператор скасовує активний маяк |
Отримавши подію, клієнти знаходять маркер за link/@uid, піднімають тривогу з дальністю і пеленгом на позицію потерпілого й підтримують маяк активним; TAK Server періодично ретранслює його. Скасування повторно використовує той самий uid події та змінює detail:
<event version="2.0" uid="ANDROID-9c2f71a4-9-1-1" type="b-a-o-can" how="h-g-i-g-o"
time="2026-10-07T08:07:22.000Z" start="2026-10-07T08:07:22.000Z"
stale="2026-10-07T08:07:32.000Z">
<point lat="50.448620" lon="30.531104" hae="160.0" ce="8.0" le="12.0"/>
<detail>
<emergency cancel="true">GRIF-2</emergency>
</detail>
</event>
Запит 9-line MEDEVAC/CASEVAC — це маркер типу b-r-f-h-c, у detail якого лежить елемент <_medevac_> (зверніть увагу на підкреслення), що містить дев'ять рядків в атрибутах. Безпечний, широко зрозумілий піднабір:
<event version="2.0" uid="7b1e0c52-2f4d-4f18-9c6e-0d4a2b9f5c31"
type="b-r-f-h-c" how="h-g-i-g-o"
time="2026-10-07T08:10:40.000Z" start="2026-10-07T08:10:40.000Z"
stale="2026-10-07T09:10:40.000Z">
<point lat="50.448620" lon="30.531104" hae="160.0" ce="8.0" le="12.0"/>
<detail>
<contact callsign="GRIF-2"/>
<_medevac_ casevac="false" title="GRIF-2 9LINE" freq="41.50"
urgent="1" priority="0" routine="0"
litter="1" ambulatory="0"
security="2" hlz_marking="2"
equipment_none="true">
<zMistsMap>
<zMist title="MIST 1" z="Z1" m="GSW"
i="left thigh" s="HR 110, BP 100/60" t="tourniquet, TXA"/>
</zMistsMap>
</_medevac_>
<remarks>Pickup at gravel yard, wind 310/8</remarks>
</detail>
</event>
Розшифрування: кількість пацієнтів за пріоритетом — у urgent/priority/routine; рядок 5 — у litter/ambulatory; security — індекс 0–3 (N — противника немає, P — можливий, E — противник у районі, X — потрібен супровід); hlz_marking індексує: A — панелі, B — піротехніка, C — дим, D — нічого, E — інше; спеціальне обладнання — булеві прапорці (hoist, extraction_equipment, ventilator); клінічний звіт MIST вкладено в zMistsMap. ATAK відтворює з цього елемента повну картку 9-line та інструменти майданчика посадки. Операційний робочий процес довкола нього розібрано у ПЗ координації CASEVAC.
Поле зору датчика та відеопосилання
Підсхема датчиків MITRE додає кероване поле зору до будь-якого маркера. Усередині події з позицією самої платформи — тут це дружній БпЛА з гвинтовим крилом, тип a-f-A-M-H-Q — додайте:
<event version="2.0" uid="UAV-ZP-07" type="a-f-A-M-H-Q" how="m-g"
time="2026-10-07T08:22:05.000Z" start="2026-10-07T08:22:05.000Z"
stale="2026-10-07T08:22:15.000Z">
<point lat="50.437120" lon="30.552870" hae="820.0" ce="12.0" le="15.0"/>
<detail>
<contact callsign="ZP-07" endpoint="*:-1:stcp"/>
<sensor azimuth="127.0" fov="30.0" vfov="22.0" range="2200.0"
elevation="-18.0" model="EO/IR turret"/>
<__video url="rtsp://192.168.4.60:8554/live.sdp"/>
</detail>
</event>
azimuth — градуси від справжнього півночі, elevation — нахил (від'ємний означає вниз), fov/vfov — горизонтальне та вертикальне поле зору в градусах, range — похила дальність у метрах; разом вони дозволяють ATAK намалювати на карті конус датчика. Дочірній елемент <__video> прив'язує маркер до URL потоку, тож відкриття маркера відкриває трансляцію. Окремі реєстрації камер подорожують як власні події типу b-i-v з елементом <ConnectionEntry>, що містить address, port, protocol та суміжні атрибути тюнера і заповнює менеджер відео в кожного клієнта. Про ширший конвеєр — частоти телеметрії, метадані KLV, наведення на ціль — читайте в інтеграції телеметрії дронів із TAK.
Саме тут застрягає більшість програм інтеграції: радар, автопілот дрона, акустичний датчик і застарілий C2-канал описують світ по-різному, і кожен треба перекласти у валідний CoT — правильні типи, чесні ce/le, стабільні UID, розумні stale — інакше COP наповнюється треками-привидами. Ми будуємо саме такі CoT-шлюзи та адаптери, а також плагіни ATAK/WinTAK, які відображають результат. Розкажіть, який канал вам потрібен на тактичній картині →
Видалення маркерів і ping/pong активності
У CoT немає вбудованого видалення; TAK додає його поверх як завдання типу t-x-d-d, де <link> називає об'єкт видалення:
<event version="2.0" uid="6650d1ee-4b17-4d02-8c95-13a1f2e9b0aa"
type="t-x-d-d" how="h-g-i-g-o"
time="2026-10-07T08:31:19.000Z" start="2026-10-07T08:31:19.000Z"
stale="2026-10-07T08:31:29.000Z">
<point lat="0.0" lon="0.0" hae="9999999.0" ce="9999999.0" le="9999999.0"/>
<detail>
<link uid="E-20261007-0413" relation="p-p" type="a-h-G-E-V-A-T"/>
<__forcedelete/>
</detail>
</event>
Без <__forcedelete/> ATAK лише позначає вказаний елемент простроченим локально та вилучає його згідно з налаштуваннями користувача; із цим елементом об'єкт вилучається остаточно в кожного клієнта, який отримав завдання. Імпортер вимагає, щоб link/@uid, @relation і @type були присутні й непорожні, тож лишайте всі три. Keepalive ще менший: клієнти TAK пінгують сервер, який замовк приблизно на 15 секунд, повторюючи це кожні кілька секунд, і трактують pong типу t-x-c-t-r як керуюче повідомлення, яке ніколи не потрапляє на карту:
<event version="2.0" uid="ANDROID-9c2f71a4-ping" type="t-x-c-t" how="m-g"
time="2026-10-07T08:33:50.000Z" start="2026-10-07T08:33:50.000Z"
stale="2026-10-07T08:34:00.000Z">
<point lat="0.0" lon="0.0" hae="0.0" ce="9999999.0" le="9999999.0"/>
</event>
Якщо ви будуєте шлюз, віддзеркалюйте цю поведінку: подія <uid>-ping через кожен інтервал, протягом якого має перевірятися з'єднання, і мовчазне відкидання pong.
Генерація валідного CoT: мітки часу, stale, UID, екранування
Типові баги генераторів CoT повторювані, і всіх їх дешево запобігти:
- UTC, завжди. Кожна мітка часу закінчується на
Z; локальні зсуви або відсутнійZзміщують маркери на години в минуле чи майбутнє. Дробові секунди необов'язкові, і будь-яка точність є коректною. - Дисципліна stale. Рухомі треки: два–чотири інтервали звітування плюс запас. Статичні маркери: години чи дні, з
<archive/>, якщо мають зберегтися. Ніколи не лишайтеstaleна типовому далекому майбутньому для живого треку — маркери-привиди — скарга номер один із поля. - Стабільні UID. Походьте uid від сутності (серійний номер, номер треку, хеш вмісту), а не від повідомлення. Два реальні треки зі спільним uid сколапсують в один мерехтливий маркер.
- Чесні похибки. Якщо не знаєте висоти або точності, видавайте
9999999.0, а не0. Рушії об'єднання даних трактують0як заяву. - Координати. Знакові десяткові градусі, WGS-84; шести знаків після коми цілком достатньо. Обрізання до чотирьох знаків (приблизно 10 м) — легітимний вибір заради смуги пропускання, який роблять деякі бібліотеки, — але робіть це послідовно.
- Екранування XML. Екрануйте
&,<,>у значеннях атрибутів і тексті — позивні та примітки рано чи пізно містять амперсанд. Один зайвий<у полі remarks вбиває весь документ ще в парсері. - Провалідуйте раз — довіряйте потім. Перевіряйте вивід вашого генератора проти опублікованого XSD подій CoT під час розробки. XSD не спіймає семантичних помилок (stale раніше за start, беззмістовні хвости type), тож додайте ці перевірки як асершії в кодувальнику.
Надсилання CoT: mesh multicast чи TAK Server
Два транспорти закривають майже кожне розгортання. Безсерверна mesh SA мультикастить кожен XML-документ як одну UDP-дейтаграму на стандартну TAK-адресу 239.2.3.1:6969 (GeoChat історично використовував також 224.10.10.1:17012); кожен клієнт у сегменті чує все, і store-and-forward немає. У серверній моделі клієнти підключаються до TAK Server по TCP — порт 8087 відкритий, 8089 TLS із клієнтськими сертифікатами, — сервер стрімить XML в обидва боки, розсилає події з фільтрацією за групами та місіями і може перекодувати потік у компактний TAK-protobuf, узгоджений на з'єднанні. Деталі кодування й узгодження, зокрема коли protobuf ламає інструменти, розібрано у протоколі TAK: CoT XML проти protobuf; маршрутизація через межі серверів — у архітектурі TAK Federation Hub, а коаліційна карти — у з'єднанні CoT і стандартів NATO.
Просте емпіричне правило вирішує вибір між ними: якщо одержувачі в тому самому RF-сегменті й втрати припустимі — multicast нічого не коштує; якщо хтось перебуває поза сегментом, в іншій мережі або потребує повторного відтворення офлайн — потрібен сервер, як і всьому, що вимагає журналу аудиту.
Перетворіть ваш датчик або C2-канал на валідний CoT
Ми будуємо CoT-шлюзи та адаптери, що перетворюють радари, дрони, акустичні датчики та застарілі C2-канали на чисті потоки Cursor on Target, а також плагіни ATAK і WinTAK, які виводять їх на тактичну картину.
Підготовлено інженерною командою Corvus Intelligence, яка будує CoT-шлюзи, інтеграції з TAK Server та плагіни ATAK/WinTAK; кожна назва елемента, код типу і поведінка тут звірені з публічною документацією схеми CoT MITRE та визначеннями CoT, опублікованими з клієнтами TAK. Про Corvus Intelligence →