pub struct Ellipsoid {
a: f64,
inv_f: f64,
f: f64,
b: f64,
e_sq: f64,
}
impl Ellipsoid {
#[inline]
pub fn new(a: f64, inv_f: f64) -> Self {
let f = 1. / inv_f;
Self {
a,
inv_f,
f,
b: a * (1. - f),
e_sq: f * (2. - f),
}
}
#[inline]
pub fn a(&self) -> f64 {
self.a
}
#[inline]
pub fn inv_f(&self) -> f64 {
self.inv_f
}
#[inline]
pub fn b(&self) -> f64 {
self.b
}
#[inline]
pub fn f(&self) -> f64 {
self.f
}
#[inline]
pub fn e_sq(&self) -> f64 {
self.e_sq
}
}
#[inline]
pub fn wgs84() -> Ellipsoid {
Ellipsoid::new(6378137., 298.257223563)
}
#[inline]
pub fn grs80() -> Ellipsoid {
Ellipsoid::new(6378137., 298.257222101)
}