Orbis.CCSDS.CDM (Orbis v0.8.0)

Copy Markdown View Source

Parse and encode CCSDS Conjunction Data Messages (CDM).

Supports both the KVN (Keyword=Value Notation) and XML formats per CCSDS 508.0-B-1. CDMs describe a predicted close approach between two space objects, including states, covariances, and collision probability.

parse/1 auto-detects the format based on the first non-whitespace character: a leading < is treated as XML, anything else as KVN.

Examples

{:ok, cdm} = Orbis.CCSDS.CDM.parse(kvn_string)
cdm.tca                    # ~U[2010-03-13 22:37:52.618Z]
cdm.miss_distance_m        # 715.0
cdm.collision_probability  # 4.835e-05

# KVN output (default)
kvn = Orbis.CCSDS.CDM.encode(cdm)

# XML output
xml = Orbis.CCSDS.CDM.encode(cdm, format: :xml)

# Round-trip through XML
{:ok, cdm2} = Orbis.CCSDS.CDM.parse(xml)

Summary

Functions

Encode a CDM.

Encode a CDM to KVN format explicitly.

Encode a CDM to XML format explicitly.

Parse a CDM in either KVN or XML format.

Parse a CDM in KVN format explicitly. Skips format auto-detection.

Parse a CDM in XML format explicitly. Skips format auto-detection.

Convert a parsed CDM to inputs for Orbis.Collision.probability/1.

Types

t()

@type t() :: %Orbis.CCSDS.CDM{
  collision_probability: float() | nil,
  collision_probability_method: String.t() | nil,
  creation_date: DateTime.t() | nil,
  hard_body_radius_m: float() | nil,
  message_id: String.t() | nil,
  miss_distance_m: float() | nil,
  object1: Orbis.CCSDS.CDM.ObjectData.t() | nil,
  object2: Orbis.CCSDS.CDM.ObjectData.t() | nil,
  originator: String.t() | nil,
  relative_speed_m_s: float() | nil,
  tca: DateTime.t() | nil
}

Functions

encode(cdm, opts \\ [])

@spec encode(
  t(),
  keyword()
) :: String.t()

Encode a CDM.

Options

  • :format:kvn (default) or :xml

encode_kvn(cdm)

@spec encode_kvn(t()) :: String.t()

Encode a CDM to KVN format explicitly.

encode_xml(cdm)

@spec encode_xml(t()) :: String.t()

Encode a CDM to XML format explicitly.

Produces a document matching the CCSDS 508.0-B-1 CDM XML schema's top-level shape (cdm > header/body > segment > metadata/data). This is the canonical XML form used for inter-system exchange alongside KVN.

parse(string)

@spec parse(String.t()) :: {:ok, t()} | {:error, String.t()}

Parse a CDM in either KVN or XML format.

Format is auto-detected from the first non-whitespace character: < routes to the XML parser, anything else to the KVN parser.

Returns {:ok, %CDM{}} or {:error, reason}.

parse_kvn(kvn_string)

@spec parse_kvn(String.t()) :: {:ok, t()} | {:error, String.t()}

Parse a CDM in KVN format explicitly. Skips format auto-detection.

parse_xml(xml)

@spec parse_xml(String.t()) :: {:ok, t()} | {:error, String.t()}

Parse a CDM in XML format explicitly. Skips format auto-detection.

to_collision_params(cdm)

@spec to_collision_params(t()) :: map()

Convert a parsed CDM to inputs for Orbis.Collision.probability/1.