Every feed, one picture — and it speaks NATO.

A multi-INT fusion engine ingests every live track source — ADS-B, AIS, ASTERIX CAT-048/062/021, SDR beast-feed, RemoteID, APRS, and TAK CoT — and resolves them into canonical entities on one Common Operating Picture. Then a single export route ships the history as STANAG 4676 TrackImageFile XML (the NATO JISR exchange format), CSV, JSON, or GeoJSON. The RemoteView "Track Data via STANAG 4676" capability, and the fusion layer that makes the COP real.

ADS-B · AIS · ASTERIXRemoteID · SDR · TAKDeterministic fusion STANAG 4676 TIFOne COPcsv · json · geojson
One query layer, every source

Fusion that turns eight feeds into one track table

Every feed writes to its own append-only history store. A unified TemporalAnalyticsService normalizes them into one queryable track-point model — so the COP, the DVR/replay panel, and the export route all read the same fused truth.

  • Deterministic-key fusion — cross-feed entity resolution merges the same platform seen on ADS-B and SDR, or the same vessel on AIS and ASTERIX, into one canonical track.
  • Source-agnostic history — one temporal query returns points from any combination of sources in a time window, normalized to (time, trackId, lon, lat, speed, bearing, altitude).
  • Retention-bounded — each source trims its own history (ASTERIX 1h, SDR 24h, …); an empty export means "no retained points," not a bug.
/api/analytics/history/export
# the same query, four formats
GET /api/analytics/history/export
    ?source=asterix
    &start=&end=
    &trackId=TRACK-0488
    &format=stanag4676   # or tif

# → STANAG 4676 Ed.2 TrackImageFile
<trackimagefile standard="STANAG 4676"
                 version="2.0">
  <trackhistory trackcount="1">
    <track>
      <tracknumber>TRACK-0488</tracknumber>
      <trackingparticle time="…Z">
        <position lat="38.9" lon="-77.0"/>
        <altitude uom="ft">35000</altitude>
        <speed uom="kt">450</speed>
      </trackingparticle>
    </track>
Interoperable by design

STANAG 4676 — the NATO JISR track-exchange format

RemoteView advertises "Track Data via STANAG 4676." So does this. One <track> per distinct TrackId, one <trackingparticle> per point (time-ordered), with optional altitude/speed/course. Pure XML emitter — no new dependency, and ASTERIX is just one source value feeding the same query.

📄

stanag4676 / tif

STANAG 4676 Ed.2 TrackImageFile XML. The tif alias matches the spec's document acronym. Streamed as application/xml.

📊

csv

Flat 8-column table, time in ISO-8601 UTC. The default — opens in any spreadsheet or analyst tool.

🧩

json

Identical shape to the in-browser /api/analytics/history route — {source, points, count}.

🌍

geojson

RFC 7946 FeatureCollection of Points, [lon, lat] coordinate order. Drops straight into QGIS or ArcGIS.

Pair with

The COP, the replay, and the alerts

Eight feeds in. One COP out. NATO-standard export.

The fusion layer that makes the Common Operating Picture real — and the export format your NATO partners expect.

Get Started