Skip to main content

use_earth_constants/
lib.rs

1#![forbid(unsafe_code)]
2#![doc = include_str!("../README.md")]
3
4/// Approximate mean Earth radius, in meters.
5pub const EARTH_RADIUS_MEAN: f64 = 6_371_000.0;
6
7/// WGS84-defined equatorial Earth radius, in meters.
8pub const EARTH_RADIUS_EQUATORIAL: f64 = 6_378_137.0;
9
10/// WGS84-defined polar Earth radius, in meters.
11pub const EARTH_RADIUS_POLAR: f64 = 6_356_752.314_245;
12
13/// Approximate Earth mass, in kilograms.
14pub const EARTH_MASS: f64 = 5.972_2e24;
15
16/// Conventional standard gravity, in meters per second squared.
17pub const STANDARD_GRAVITY: f64 = 9.806_65;
18
19/// Conventional standard sea-level atmospheric pressure, in pascals.
20pub const SEA_LEVEL_STANDARD_PRESSURE: f64 = 101_325.0;
21
22/// WGS84-defined semi-major axis, in meters.
23pub const WGS84_A: f64 = 6_378_137.0;
24
25/// WGS84-defined semi-minor axis, in meters.
26pub const WGS84_B: f64 = 6_356_752.314_245;
27
28/// WGS84-defined flattening, dimensionless.
29pub const WGS84_FLATTENING: f64 = 1.0 / 298.257_223_563;
30
31#[cfg(test)]
32mod tests {
33    use super::{
34        EARTH_MASS, EARTH_RADIUS_EQUATORIAL, EARTH_RADIUS_MEAN, EARTH_RADIUS_POLAR,
35        SEA_LEVEL_STANDARD_PRESSURE, STANDARD_GRAVITY, WGS84_A, WGS84_B, WGS84_FLATTENING,
36    };
37
38    #[test]
39    fn earth_radii_follow_expected_ordering() {
40        assert!(EARTH_RADIUS_EQUATORIAL > EARTH_RADIUS_MEAN);
41        assert!(EARTH_RADIUS_MEAN > EARTH_RADIUS_POLAR);
42    }
43
44    #[test]
45    fn wgs84_axes_match_radius_aliases() {
46        assert_eq!(EARTH_RADIUS_EQUATORIAL, WGS84_A);
47        assert_eq!(EARTH_RADIUS_POLAR, WGS84_B);
48    }
49
50    #[test]
51    fn representative_environment_constants_are_reasonable() {
52        assert!(WGS84_FLATTENING > 0.0);
53        assert!(STANDARD_GRAVITY > 9.8 && STANDARD_GRAVITY < 9.9);
54        assert_eq!(SEA_LEVEL_STANDARD_PRESSURE, 101_325.0);
55        assert!(EARTH_MASS > 0.0);
56    }
57}