Quick Start
Let's suppose we obtained the Orbit Mean-Elements Message (OMM) below describing the orbit of the Amazonia 1 satellite. This is the XML format returned by services such as Space-Track:
<?xml version="1.0" encoding="utf-8"?>
<ndm><omm id="CCSDS_OMM_VERS" version="3.0">
<header>
<COMMENT>GENERATED VIA SPACE-TRACK.ORG API</COMMENT>
<CREATION_DATE>2025-12-30T23:36:37</CREATION_DATE>
<ORIGINATOR>18 SPCS</ORIGINATOR>
</header>
<body><segment>
<metadata>
<OBJECT_NAME>AMAZONIA 1</OBJECT_NAME>
<OBJECT_ID>2021-015A</OBJECT_ID>
<CENTER_NAME>EARTH</CENTER_NAME>
<REF_FRAME>TEME</REF_FRAME>
<TIME_SYSTEM>UTC</TIME_SYSTEM>
<MEAN_ELEMENT_THEORY>SGP4</MEAN_ELEMENT_THEORY>
</metadata>
<data>
<meanElements>
<EPOCH>2025-12-30T18:12:04.533984</EPOCH>
<MEAN_MOTION>14.40772474</MEAN_MOTION>
<ECCENTRICITY>0.00011240</ECCENTRICITY>
<INCLINATION>98.3721</INCLINATION>
<RA_OF_ASC_NODE>75.0877</RA_OF_ASC_NODE>
<ARG_OF_PERICENTER>97.3772</ARG_OF_PERICENTER>
<MEAN_ANOMALY>262.7545</MEAN_ANOMALY>
</meanElements>
</data>
</segment></body>
</omm></ndm>Assuming the string above is stored in the variable omm_xml, we can parse it into an OrbitMeanElementsMessage object using parse_omm:
julia> omm = parse_omm(omm_xml)OrbitMeanElementsMessage: ├─ Header │ Comment : GENERATED VIA SPACE-TRACK.ORG API │ Creation Date : 2025-12-30T23:36:37 │ Originator : 18 SPCS ├─ Metadata │ Object Name : AMAZONIA 1 │ Object ID : 2021-015A │ Center Name : EARTH │ Ref. Frame : TEME │ Time System : UTC │ Mean Element Theory : SGP4 └─ Data ├─ Mean Keplerian Elements │ Epoch : 2025-12-30T18:12:04.533984 │ Mean Motion : 14.40772474 rev/day │ Eccentricity : 0.0001124 │ Inclination : 98.3721° │ RA of Asc. Node : 75.0877° │ Arg. of Pericenter : 97.3772° │ Mean Anomaly : 262.7545° └─ TLE Related Parameters Ephemeris Type : 0 Classification Type : U NORAD Cat ID : 47699 Element Set Number : 999 Rev at Epoch : 25439 B* : 0.0001533 1/ER ∂(Mean Motion)/∂t : 4.47e-6 rev/day² ∂²(Mean Motion)/∂t² : 0.0 rev/day³
The message fields are organized into the three sections defined by the CCSDS standard (header, metadata, and data). We can access them directly:
julia> omm.header.originator"18 SPCS"julia> omm.metadata.object_name"AMAZONIA 1"julia> omm.data.epoch2025-12-30T18:12:04.533984julia> omm.data.inclination98.3721
Every field of the sections is also available as a property of the message itself, which flattens the hierarchy for the common fields:
julia> omm.originator"18 SPCS"julia> omm.object_name"AMAZONIA 1"julia> omm.epoch2025-12-30T18:12:04.533984julia> omm.inclination98.3721
The only exception is the comments field, which exists in every section and must be accessed through it (e.g. omm.header.comments). See OrbitMeanElementsMessage for the details.
If the OMM is stored in a file, use read_omm instead:
omm = read_omm("amazonia_1.xml")From here, you can explore the rest of the manual to learn how to create OMMs from scratch, write them to files, fetch them online, or convert them to a TLE.