gnss_qc/navigation/
reference_position.rs1use crate::prelude::{Epoch, Frame, Orbit};
2
3pub struct ReferenceEcefPosition {
4 pub ecef_m: (f64, f64, f64),
6}
7
8impl ReferenceEcefPosition {
9 pub fn new(ecef_m: (f64, f64, f64)) -> Self {
11 Self { ecef_m }
12 }
13
14 pub fn from_orbit(orbit: &Orbit) -> Self {
16 let posvel_m = orbit.to_cartesian_pos_vel() * 1.0E3;
17 let ecef_m = (posvel_m[0], posvel_m[1], posvel_m[2]);
18 Self { ecef_m }
19 }
20
21 pub fn to_orbit(&self, t: Epoch, frame: Frame) -> Orbit {
23 let (x_km, y_km, z_km) = (
24 self.ecef_m.0 * 1.0E-3,
25 self.ecef_m.1 * 1.0E-3,
26 self.ecef_m.2 * 1.0E-3,
27 );
28
29 Orbit::from_position(x_km, y_km, z_km, t, frame)
30 }
31}