20#define M_PI std::numbers::pi
32constexpr double F_WGS84 = 0.003352810664747;
38#define MPS2KNOT (3600. / NM2M)
39#define USFOOT2M (1200. / 3937.)
42constexpr double MAS =
M_PI / (180 * 3600000.);
47constexpr double operator"" _ftUS (
long double ftus)
52constexpr double operator"" _ftUS (
unsigned long long ftus)
60constexpr double operator"" _nmi (
long double nmi)
65constexpr double operator"" _nmi (
unsigned long long nmi)
76constexpr double DEG (
double dd)
82constexpr double D2rad (
double dd)
88constexpr double rad2D (
double r)
96constexpr double DM (
double dd,
double mm)
98 return (dd + mm / 60.) *
D2R;
104 int sign = (ddmm >= 0) ? 1 : -1;
107 int deg = (int)(ddmm / 100.);
108 ddmm -= (double)deg * 100.;
109 return sign * (deg + ddmm / 60.);
116 return (dd - deg) * 60. + deg * 100.;
134constexpr double DMS (
double dd,
double mm,
double ss)
136 return (dd + mm / 60. + ss / 3600.) *
D2R;
142 int sign = (dms >= 0) ? 1 : -1;
145 int deg = (int)(dms / 10000.);
146 dms -= (double)deg * 10000;
147 int min = (int)(dms / 100.);
148 dms -= (double)min * 100.;
149 return sign * (deg + min / 60. + dms / 3600.);
162constexpr double operator"" _deg (
long double deg)
167constexpr double operator"" _deg (
unsigned long long deg)
175constexpr double operator"" _arcmin (
long double min)
177 return min/60. *
D2R;
180constexpr double operator"" _arcmin (
unsigned long long min)
182 return min/60. *
D2R;
188constexpr double operator ""_dm (
long double val)
193constexpr double operator ""_dm (
unsigned long long val)
195 return DM2rad ((
double)val);
201constexpr double operator ""_dms (
long double val)
206constexpr double operator ""_dms (
unsigned long long val)
214constexpr double operator"" _arcsec (
long double sec)
216 return sec/3600. *
D2R;
219constexpr double operator"" _arcsec (
unsigned long long sec)
221 return sec/3600. *
D2R;
228constexpr double operator"" _mas (
long double mas)
233constexpr double operator"" _mas (
unsigned long long mas)
253std::string
degtoa (
double degrees, deg_fmt format,
bool latitude,
int precision);
256double atodeg (
const std::string& str);
269 return {std::sin (val), std::cos (val)};
std::pair< T, T > sincos(T val)
A handy template to get sin and cos in a single function call.
Definition convert.h:267
deg_fmt
Formatting options for degtoa() function.
Definition convert.h:246
@ minutes
Degrees, minutes format (DD°MM.mmmm')
Definition convert.h:248
@ degrees
Decimal degrees (DD.dddd°)
Definition convert.h:247
@ seconds
Degrees, minutes, seconds format (DD°MM'SS.sss")
Definition convert.h:249
double deg_reduce(double value)
Reduces a degrees value to [0,360) interval.
Definition convert.cpp:47
constexpr double rad2DM(double rad)
Convert from radians to degrees, minutes (DDMM.mmm)
Definition convert.h:120
constexpr double DM2rad(double val)
Convert degrees, minutes (DDMM.mmm) to radians.
Definition convert.h:126
constexpr double DMS2rad(double dms)
Convert degrees, minutes, seconds (DDMMSS.sss) to radians.
Definition convert.h:153
constexpr double DMS2deg(double dms)
Convert degrees, minutes, seconds (DDMMSS.sss) to decimal degrees.
Definition convert.h:140
constexpr double F_WGS84
Flattening of WGS84 ellipsoid.
Definition convert.h:32
#define USFOOT2M
US Survey foot to meters conversion factor.
Definition convert.h:39
constexpr double MAS
milli-arcsecond
Definition convert.h:42
double atodeg(const std::string &str)
Conversion from string to decimal degrees.
Definition convert.cpp:128
constexpr double DM(double dd, double mm)
Convert degrees, minutes to radians.
Definition convert.h:96
#define NM2M
Nautical mile to meters conversion factor.
Definition convert.h:37
constexpr double DEG(double dd)
Convert decimal degrees to radians.
Definition convert.h:76
constexpr double F1_WGS84
Inverse of flattening for WGS84 ellipsoid.
Definition convert.h:35
constexpr double D2R
Degrees to radians conversion factor.
Definition convert.h:26
constexpr double D2rad(double dd)
Convert decimal degrees to radians.
Definition convert.h:82
constexpr double deg2DM(double dd)
Convert decimal degrees to degrees, minutes (DDMM.mmm)
Definition convert.h:113
constexpr double rad2D(double r)
Convert radians to decimal degrees.
Definition convert.h:88
constexpr double DM2deg(double ddmm)
Convert degrees, minutes (DDMM.mmm) to decimal degrees.
Definition convert.h:102
#define M_PI
Older name for std::numbers::pi
Definition convert.h:20
std::string degtoa(double degrees, deg_fmt format, bool latitude, int precision)
Conversion from degrees to a string.
Definition convert.cpp:72
constexpr double A_WGS84
Semimajor axis of WGS84 ellipsoid.
Definition convert.h:29
constexpr double DMS(double dd, double mm, double ss)
Convert degrees, minutes seconds to radians.
Definition convert.h:134