★ New

Replay the flight, frame by frame.

Drop a flight log onto 3D Map Explorer and watch the trajectory animate across the terrain against a scrubable timeline. The dispatcher sniffs the file — ArduPilot .tlog (MAVLink stream), .bin/.log (dataflash), or DJI DatCon .csv — routes to the right reader, and serves the time-animated track for post-flight analysis. The same log store feeds PPK and the fleet manager.

.tlog (ArduPilot MAVLink).bin / .log dataflash.csv (DJI DatCon) Magic-byte sniffingTime-animated trackPPK + fleet source
What it does

One reader dispatcher, every common log format.

FlightLogReader sniffs the extension (and, for ambiguous cases, a few magic bytes) and routes to the format-specific reader. Every reader is non-throwing — an unparseable input returns null and the caller surfaces a clean error. Nothing crashes the host.

  • .tlogArduPilotTlogReader — MAVLink stream with timestamps.
  • .bin / .logArduPilotBinReader — binary + text dataflash variants.
  • .dat (DJI)DjiDatReader — honest stub; flagged as not-yet-implemented.
  • .csvDjiCsvReader — DatCon export, the practical DJI path.
  • Magic-byte sniffing — extension-less files probed (MAVLink 0xFD/0xFE at byte 8, "DataFlash"/"ArduPilot" header).
POST /api/flightlog/ingest
// upload log → sniff → parse → store
{ "file": "flight-043.tlog" }
→ routed to ArduPilotTlogReader
GET /api/flightlog/logs/{id}/track
{
  "points": [[34.05,-118.25,120,1690000000]],
  "startUtc": "2026-07-31T14:00Z"
}
→ time-animated on the map
Flight-log replay with time-scrubber and animated trajectory over terrain
Why it matters

The shared backbone of post-flight

Flight-log replay isn't a one-off viewer — it's the trajectory source two other UAS features build on. Load a log once; replay it, post-process it for centimeter accuracy, and credit its hours to the fleet registry.

▶️

Time-animated replay

Track served per-log; scrub the timeline and watch position/attitude move across the terrain.

📡

Feeds PPK

PpkService reads the recorded trajectory straight from the log store for post-processing.

🗂️

Feeds the fleet

Logged flights roll up into aircraft flight-hour totals and maintenance thresholds.

🔎

Non-throwing parse

Unparseable logs return null + a clean error — never crash the in-process server.

🧪

Honest stubs

DJI .dat reader is stubbed and flagged — DatCon .csv is the supported DJI path today.

🗑️

Lifecycle

Ingest, list, fetch track, delete — full CRUD over REST.

REST API surface

Ingest and replay from your own tools

CapabilityEndpointNotes
Ingest logPOST /api/flightlog/ingestSniffs extension/magic bytes → routes to reader
List logsGET /api/flightlog/logsStored flight logs
Log detailGET /api/flightlog/logs/{id}Metadata + summary
Time trackGET /api/flightlog/logs/{id}/trackTime-animated trajectory points
DeleteDELETE /api/flightlog/logs/{id}

Format support reflects FlightLogReader / ArduPilotTlogReader / DjiCsvReader on the current build. DJI native .dat is an honest stub — use DatCon-exported .csv for DJI logs today.

Part of the UAS loop

Plan → Preflight → Fly → Process → Exploit

Every flight, on the record

Ingest .tlog / .bin / .csv, replay the trajectory against a timeline, and feed PPK and the fleet registry from one store.