Skip to Content
ReferenceFile formatsOverview

File formats

Who this section is for. Anyone moving data between this software and another tool. It assumes you know what you want to exchange and need to know exactly what the bytes mean.

What each format is for

FormatDirectionPurpose
Constellation JSONRead and writtenThe design document: satellites, shells, and initial orbits
CZMLWrittenTime-dynamic scene for the CesiumJS globe viewer
CCSDS OEMRead and writtenEphemeris interchange with other flight-dynamics tools
TLEReadImport of cataloged objects
SP3ReadPrecise ephemeris products
GeoJSONWrittenCoverage grids for mapping tools
CSVWrittenEphemeris and contact tables for analysis

Choosing between them

The most common mistake is using a visualization format for interchange.

CZML describes a scene over time. It is not a precise interchange format, it carries no frame or time-system declaration in the way OEM does, and handing it to another organization as a trajectory is a mistake. Use OEM for that.

The unit trap

CZML uses meters. Every other format uses kilometers.

The same state, exported both ways from one run:

CZML : 6928137.0 OEM : 6928.137

Nothing about either file announces the difference, and a mixed-up conversion produces positions wrong by a factor of 1000, which places a low Earth orbit satellite well beyond the Moon or inside the Earth depending on direction.

CZML uses meters because the CesiumJS convention is meters. Everything else uses kilometers because that is the working unit of orbital mechanics.

FormatPosition unitVelocity unit
CZMLmm/s
CCSDS OEMkmkm/s
CSV ephemeriskmkm/s
Constellation JSONkm (semi-major axis)n/a
SP3kmkm/s, where present

The ordering trap

GeoJSON coordinates are [longitude, latitude], in that order. Every other surface here lists latitude first.

That ordering is required by the GeoJSON specification, not a choice made here, and it is the standard cause of a map with everything transposed into the wrong hemisphere.

Provenance travels with the data, or it does not

FormatCarries frameCarries time systemCarries epoch
CCSDS OEMYes, REF_FRAMEYes, TIME_SYSTEMYes, per record
CZMLPartly, referenceFrameNoYes, as an offset base
CSV ephemerisNoNoNo, elapsed seconds only
TLEImplicit, TEMEImplicit, UTCYes, in the element set
Constellation JSONNoNoNo

A CSV of positions carries no frame, no time system, and no absolute epoch. Its time_s column is elapsed seconds from a scenario start that lives somewhere else.

Export the scenario metadata alongside any CSV you intend to keep. Without it the file is a table of numbers that cannot be reproduced or checked, which is exactly what makes a result impossible to audit months later.

OEM is the opposite case, and that is why it is the interchange format: frame, time system, and epoch are all declared in the file itself.

See also

Question? Give us feedbackDocuments Varaha Constellation Designer main (pre-release)
Last updated on