vgl 1.0.0
Virtual Globe Library: API reference
Loading...
Searching...
No Matches
geodesy.hpp
Go to the documentation of this file.
1// SPDX-License-Identifier: MIT
2// Copyright (c) 2026 Jeremiah van Oosten
3//
4// C++ wrapper for vgl/geodesy.h (docs/c-api.md, section 16).
5
6#ifndef VGL_GEODESY_HPP
7#define VGL_GEODESY_HPP
8
9#include <vgl/base.hpp>
10#include <vgl/geodesy.h>
11
12namespace vgl
13{
14
15inline constexpr double pi = VGL_PI;
16
17[[nodiscard]] constexpr double degrees_to_radians(double degrees) noexcept
18{
20}
21
22[[nodiscard]] constexpr double radians_to_degrees(double radians) noexcept
23{
25}
26
27// Returns the WGS84 ellipsoid.
29{
31 static_cast<void>(vgl_ellipsoid_wgs84_get(&e));
32 return e;
33}
34
35[[nodiscard]] inline expected<vgl_dvec3>
37{
39 const auto r =
40 static_cast<result>(vgl_ellipsoid_geodetic_to_ecef(&ellipsoid, &geodetic, &ecef));
41 if (failed(r))
42 {
43 return unexpected(r);
44 }
45 return ecef;
46}
47
48[[nodiscard]] inline expected<vgl_geodetic>
50{
51 vgl_geodetic geodetic{};
52 const auto r =
53 static_cast<result>(vgl_ellipsoid_ecef_to_geodetic(&ellipsoid, &ecef, &geodetic));
54 if (failed(r))
55 {
56 return unexpected(r);
57 }
58 return geodetic;
59}
60
66
67[[nodiscard]] inline expected<enu_frame>
69{
71 const auto r = static_cast<result>(
72 vgl_ellipsoid_enu_frame_get(&ellipsoid, &origin, &frame.enu_to_ecef, &frame.ecef_to_enu));
73 if (failed(r))
74 {
75 return unexpected(r);
76 }
77 return frame;
78}
79
80// The Earth rotation angle in radians at a Julian date in UT1 (vgl_earth_rotation_angle_get).
82{
83 double angle = 0.0;
84 const auto r = static_cast<result>(vgl_earth_rotation_angle_get(julian_date, &angle));
85 if (failed(r))
86 {
87 return unexpected(r);
88 }
89 return angle;
90}
91
92} // namespace vgl
93
94#endif // VGL_GEODESY_HPP
Definition base.hpp:87
Definition render.hpp:31
Definition base.hpp:72
vgl_result vgl_ellipsoid_wgs84_get(vgl_ellipsoid *out_ellipsoid)
#define VGL_DEGREES_TO_RADIANS(degrees)
Definition geodesy.h:20
#define VGL_RADIANS_TO_DEGREES(radians)
Definition geodesy.h:21
vgl_result vgl_ellipsoid_enu_frame_get(const vgl_ellipsoid *ellipsoid, const vgl_geodetic *origin, vgl_dmat4 *out_enu_to_ecef, vgl_dmat4 *out_ecef_to_enu)
#define VGL_PI
Definition geodesy.h:16
vgl_result vgl_ellipsoid_geodetic_to_ecef(const vgl_ellipsoid *ellipsoid, const vgl_geodetic *geodetic, vgl_dvec3 *out_ecef)
vgl_result vgl_earth_rotation_angle_get(double julian_date, double *out_angle)
vgl_result vgl_ellipsoid_ecef_to_geodetic(const vgl_ellipsoid *ellipsoid, const vgl_dvec3 *ecef, vgl_geodetic *out_geodetic)
Definition base.hpp:22
constexpr double degrees_to_radians(double degrees) noexcept
Definition geodesy.hpp:17
expected< double > earth_rotation_angle_get(double julian_date) noexcept
Definition geodesy.hpp:81
constexpr double radians_to_degrees(double radians) noexcept
Definition geodesy.hpp:22
result
Definition base.hpp:25
expected< enu_frame > ellipsoid_enu_frame_get(const vgl_ellipsoid &ellipsoid, const vgl_geodetic &origin) noexcept
Definition geodesy.hpp:68
expected< vgl_geodetic > ellipsoid_ecef_to_geodetic(const vgl_ellipsoid &ellipsoid, const vgl_dvec3 &ecef) noexcept
Definition geodesy.hpp:49
vgl_ellipsoid ellipsoid_wgs84_get() noexcept
Definition geodesy.hpp:28
expected< vgl_dvec3 > ellipsoid_geodetic_to_ecef(const vgl_ellipsoid &ellipsoid, const vgl_geodetic &geodetic) noexcept
Definition geodesy.hpp:36
constexpr double pi
Definition geodesy.hpp:15
Definition geodesy.hpp:62
vgl_dmat4 enu_to_ecef
Definition geodesy.hpp:63
vgl_dmat4 ecef_to_enu
Definition geodesy.hpp:64
Definition base.h:88
Definition base.h:69
Definition geodesy.h:36
Definition geodesy.h:43