# Rust Map3d
[](https://crates.io/crates/map_3d)

[](https://opensource.org/licenses/Apache-2.0)
[](https://codecov.io/gh/gberrante/map_3d)
This is a Rust library for geographic coordinate frame conversion. The implementation is similar to [Pymap3d](https://github.com/geospace-code/pymap3d). All the functions are implemented in `f64` precision.
Live demo: [map 3d live demo](https://rustmap-3d.firebaseapp.com/)
No external dependencies
The default units are:
- Radians [rad] for angular variables
- Meters [m] for linear variables
- [Greenwich Sidereal Time](https://www.cfa.harvard.edu/~jzhao/times.html) [GST] for date and time
We support several reference ellipsoids,
[WGS84](https://en.wikipedia.org/wiki/World_Geodetic_System#A_new_World_Geodetic_System:_WGS_84)
is defined as the default one, obtained with `Ellipsoid::default()`.
List of coordinates systems implemented in the functions:
- [Geodetic coordinate system](https://en.wikipedia.org/wiki/Geographic_coordinate_system) (GEODETIC)
- [Earth-Centered Earth-fixed](https://en.wikipedia.org/wiki/ECEF) (ECEF)
- [Earth-Centered Inertial](https://en.wikipedia.org/wiki/Earth-centered_inertial) (ECI)
- [Local spherical coordinate system](https://en.wikipedia.org/wiki/Spherical_coordinate_system#In_geography) (AER)
- [Local tangent plane coordinate system - East-North-Up](https://en.wikipedia.org/wiki/Local_tangent_plane_coordinates) (ENU)
- [Local tangent plane coordinate system - North-East-Down](https://en.wikipedia.org/wiki/Local_tangent_plane_coordinates) (NED)
Additional functions:
> [!TIP]
> Conversion from `degrees` to `radians` (_and vice versa_) is natively supported. See [to_radians](https://doc.rust-lang.org/std/primitive.f64.html#method.to_radians) and [to_degrees](https://doc.rust-lang.org/std/primitive.f64.html#method.to_degrees)
- UTC time conversion to GST
- 3x3 Matrix - 3x1 column multiplication
- 3x3 Matrix transpose
- f64 round towards zero
- projected distance (`Haversine` formula) between two coordinates (lat, lon, in decimal degrees)