Cursor on Target (CoT) — це формат повідомлень на основі XML, розроблений Лабораторією авіаційних досліджень США на початку 2000-х для вирішення конкретної проблеми: як обмінюватися позицією, ідентичністю та статусом цілі або підрозділу між різнорідними військовими системами, що не призначені для взаємодії? CoT відповів мінімальною, розширюваною XML-схемою, яку будь-яка система може виробляти і споживати без центрального реєстру чи координуючого органу.
Два десятиліття потому CoT став де-факто стандартом для позиційних доповідей та обміну подіями в екосистемі тактичного краю. ATAK (Android Team Awareness Kit), WinTAK, iTAK, TAK Server та сотні плагінів і нестандартних інтеграцій використовують CoT. Будь-яке оборонне програмне забезпечення, якому потрібно обмінюватися позиційними даними з тактичними польовими системами, повинно генерувати або споживати повідомлення CoT.
Структура XML: елементи event, point, detail
Повідомлення CoT — це XML-документ з одним кореневим елементом: <event>. Кожне повідомлення CoT є подією, незалежно від того, чи описує воно оновлення позиції, доповідь датчика, повідомлення чату чи завдання місії.
Мінімальний позиційний доповідь CoT виглядає так:
<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"/>
<track speed="0.0" course="270.0"/>
</detail>
</event>
uid: Глобально унікальний ідентифікатор сутності. Зберігається у всіх доповідях для однієї сутності.
type: Ієрархічний рядок, що кодує класифікацію сутності. a-f-G-U-C = атом, дружній, наземний, підрозділ, бойовий. a-h-A = атом, ворожий, повітряний.
stale: Час, після якого звіт слід вважати застарілим. Встановлюйте приблизно у 2× очікуваний інтервал оновлення. Занадто довгий stale призводить до появи примарних треків на COP.
point: Позиція сутності у координатах WGS84. hae — висота над еліпсоїдом WGS84 в метрах (не MSL). ce та le — кругова та лінійна помилки у метрах.
detail: Розширюваний XML-елемент для специфічних для застосунку даних. Підпрограма CoT/TAK визначає загальновідомі піделементи: contact, group, status, track, precisionlocation.
Типи CoT: ієрархія класифікації
Ієрархія типів CoT — найважливіший аспект формату. Рядок типу визначає, як приймаюча система класифікує, символізує та обробляє подію:
a-f-G (Дружній наземний): Відображається синім прямокутником за MIL-STD-2525.
a-h-G (Ворожий наземний): Відображається червоним ромбом.
a-u-G (Невідомий наземний): Відображається жовтим знаком питання. Для не ідентифікованих радарних контактів.
a-f-A (Дружній повітряний): Дружні БпЛА, гелікоптери та літаки.
t-x-c-t: Повідомлення GeoChat — ATAK використовує CoT для передачі текстових повідомлень.
TAK Server: маршрутизація, фільтрація та федерація
TAK Server є серверним компонентом екосистеми TAK. Він отримує повідомлення CoT від підключених клієнтів та маршрутизує їх до інших підключених клієнтів на основі настроюваних правил.
Групи обмежують, які клієнти можуть бачити які події. Федерація з'єднує кілька екземплярів TAK Server, дозволяючи подіям CoT переміщатися між серверними екземплярами в різних географічних місцях або на різних рівнях безпеки — механізм, за допомогою якого позиції нижчого ешелону стають видимими на системах COP вищого ешелону.
Реалізація на Python: аналіз та генерація CoT
Бібліотека pytak надає повну реалізацію генерації подій CoT та архітектуру на основі черги для інтеграції з TAK Server. Для аналізу достатньо стандартного xml.etree.ElementTree Python; для виробництва рекомендується lxml з валідацією XSD.
Підключення до TAK Server через TCP вимагає встановлення TCP-з'єднання до порту 8087 (або TLS на 8089) та запису рядка XML з наступним байтом нульового термінатора. Бібліотека pytak абстрагує це і підтримує мультикаст UDP для розгортань у локальній мережі.
Посібник з часу stale: Встановлюйте час stale приблизно у 2× очікуваний інтервал оновлення для типу сутності. Для пішохідного солдата, що оновлюється кожні 30 секунд, stale має бути 60 секунд. Для БпЛА, що оновлюється з частотою 1 Гц, stale має бути 5–10 секунд.