vgl 1.0.0
Virtual Globe Library: API reference
Loading...
Searching...
No Matches
geodesy.h
Go to the documentation of this file.
1/*
2 * SPDX-License-Identifier: MIT
3 * Copyright (c) 2026 Jeremiah van Oosten
4 *
5 * vgl geodesy: ellipsoids and conversions between geodetic, Earth-centred Earth-fixed (ECEF)
6 * and local East-North-Up (ENU) coordinates (design document, section 7.2; FR-09).
7 *
8 * Angles are in radians and lengths in metres (docs/c-api.md, section 4.3). ECEF is
9 * right-handed, with +Z through the north pole and +X through latitude 0, longitude 0.
10 */
11#ifndef VGL_GEODESY_H
12#define VGL_GEODESY_H
13
14#include <vgl/base.h>
15
16#define VGL_PI 3.14159265358979323846
17
20#define VGL_DEGREES_TO_RADIANS(degrees) ((degrees) * (VGL_PI / 180.0))
21#define VGL_RADIANS_TO_DEGREES(radians) ((radians) * (180.0 / VGL_PI))
22
24#define VGL_WGS84_SEMI_MAJOR_AXIS 6378137.0
25#define VGL_WGS84_FLATTENING (1.0 / 298.257223563)
26
27#ifdef __cplusplus
28extern "C" {
29#endif
30
35typedef struct vgl_ellipsoid
36{
38 double flattening;
40
42typedef struct vgl_geodetic
43{
44 double latitude;
45 double longitude;
46 double height;
48
61
80 const vgl_geodetic* geodetic,
81 vgl_dvec3* out_ecef);
82
102 const vgl_dvec3* ecef,
103 vgl_geodetic* out_geodetic);
104
126 const vgl_geodetic* origin,
127 vgl_dmat4* out_enu_to_ecef,
128 vgl_dmat4* out_ecef_to_enu);
129
147VGL_API vgl_result vgl_earth_rotation_angle_get(double julian_date, double* out_angle);
148
161VGL_API vgl_result vgl_degrees_to_radians(double degrees, double* out_radians);
162
175VGL_API vgl_result vgl_radians_to_degrees(double radians, double* out_degrees);
176
177#ifdef __cplusplus
178}
179#endif
180
181#endif /* VGL_GEODESY_H */
vgl_result
Definition base.h:98
#define VGL_API
Definition base.h:28
vgl_result vgl_ellipsoid_wgs84_get(vgl_ellipsoid *out_ellipsoid)
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)
vgl_result vgl_degrees_to_radians(double degrees, double *out_radians)
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)
vgl_result vgl_radians_to_degrees(double radians, double *out_degrees)
Definition base.h:88
Definition base.h:69
Definition geodesy.h:36
double flattening
Definition geodesy.h:38
double semi_major_axis
Definition geodesy.h:37
Definition geodesy.h:43
double height
Definition geodesy.h:46
double longitude
Definition geodesy.h:45
double latitude
Definition geodesy.h:44