gnss_qc/navigation/
reference_position.rs

1use crate::prelude::{Epoch, Frame, Orbit};
2
3pub struct ReferenceEcefPosition {
4    /// Ecef coordinates in meters
5    pub ecef_m: (f64, f64, f64),
6}
7
8impl ReferenceEcefPosition {
9    /// Define new [ReferenceEcefPosition] from ECEF coordinates
10    pub fn new(ecef_m: (f64, f64, f64)) -> Self {
11        Self { ecef_m }
12    }
13
14    /// Create a new [ReferenceEcefPosition] from an [Orbit]
15    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    /// Express this [ReferenceEcefPosition] as an [Orbit]
22    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}