52 lines
1.9 KiB
Python
52 lines
1.9 KiB
Python
"""Support for Orbit Mean-Elements Message (OMM) orbital elements format."""
|
|
|
|
import csv
|
|
import xml.etree.ElementTree as ET
|
|
from datetime import datetime
|
|
from math import pi
|
|
from sgp4.api import WGS72
|
|
|
|
def parse_csv(file):
|
|
return csv.DictReader(file)
|
|
|
|
def parse_xml(file):
|
|
root = ET.parse(file).getroot()
|
|
for segment in root.findall('.//segment'):
|
|
metadata = segment.find('metadata')
|
|
data = segment.find('data')
|
|
meanElements = data.find('meanElements')
|
|
tleParameters = data.find('tleParameters')
|
|
fields = {}
|
|
for element in metadata, meanElements, tleParameters:
|
|
fields.update((field.tag, field.text) for field in element)
|
|
yield fields
|
|
|
|
_epoch0 = datetime(1949, 12, 31)
|
|
_to_radians = pi / 180.0
|
|
_ndot_units = 1036800.0 / pi # See SGP4.cpp for details.
|
|
_nddot_units = 2985984000.0 / 2.0 / pi # See SGP4.cpp for details.
|
|
|
|
def initialize(sat, fields, gravconst=WGS72):
|
|
sat.classification = fields['CLASSIFICATION_TYPE']
|
|
sat.intldesg = fields['OBJECT_ID'][2:].replace('-', '')
|
|
sat.ephtype = int(fields['EPHEMERIS_TYPE'])
|
|
sat.elnum = int(fields['ELEMENT_SET_NO'])
|
|
sat.revnum = int(fields['REV_AT_EPOCH'])
|
|
|
|
epoch_datetime = datetime.strptime(fields['EPOCH'], '%Y-%m-%dT%H:%M:%S.%f')
|
|
epoch = (epoch_datetime - _epoch0).total_seconds() / 86400.0
|
|
|
|
argpo = float(fields['ARG_OF_PERICENTER']) * _to_radians
|
|
bstar = float(fields['BSTAR'])
|
|
ecco = float(fields['ECCENTRICITY'])
|
|
inclo = float(fields['INCLINATION']) * _to_radians
|
|
mo = float(fields['MEAN_ANOMALY']) * _to_radians
|
|
nddot = float(fields['MEAN_MOTION_DDOT']) / _nddot_units
|
|
ndot = float(fields['MEAN_MOTION_DOT']) / _ndot_units
|
|
no_kozai = float(fields['MEAN_MOTION']) / 720.0 * pi
|
|
nodeo = float(fields['RA_OF_ASC_NODE']) * _to_radians
|
|
satnum = int(fields['NORAD_CAT_ID'])
|
|
|
|
sat.sgp4init(gravconst, 'i', satnum, epoch, bstar, ndot, nddot, ecco,
|
|
argpo, inclo, mo, no_kozai, nodeo)
|