10#ifndef GEODETIC_CONVERTER_HPP
11#define GEODETIC_CONVERTER_HPP
27 {{{33, 0, 0}, {129, 30, 0}}},
28 {{{33, 0, 0}, {131, 0, 0}}},
29 {{{36, 0, 0}, {132, 10, 0}}},
30 {{{33, 0, 0}, {133, 30, 0}}},
31 {{{36, 0, 0}, {134, 20, 0}}},
32 {{{36, 0, 0}, {136, 0, 0}}},
33 {{{36, 0, 0}, {137, 10, 0}}},
34 {{{36, 0, 0}, {138, 30, 0}}},
35 {{{36, 0, 0}, {139, 50, 0}}},
36 {{{40, 0, 0}, {140, 50, 0}}},
37 {{{44, 0, 0}, {140, 15, 0}}},
38 {{{44, 0, 0}, {142, 15, 0}}},
39 {{{44, 0, 0}, {144, 15, 0}}},
40 {{{26, 0, 0}, {142, 0, 0}}},
41 {{{26, 0, 0}, {127, 30, 0}}},
42 {{{26, 0, 0}, {124, 0, 0}}},
43 {{{26, 0, 0}, {131, 0, 0}}},
44 {{{20, 0, 0}, {136, 0, 0}}},
45 {{{26, 0, 0}, {154, 0, 0}}}
76static constexpr double power(
double base,
int exp)
78 return (exp == 0) ? 1.0 : base * power(base, exp - 1);
120 double dms2deg(
const std::array<double, 3> & dms);
127 std::array<double, 3>
deg2dmg(
const double & deg)
const;
134 double deg2rad(
double deg)
const;
141 double rad2deg(
double rad)
const;
152 static constexpr double a = 6378137.0;
153 static constexpr double F = 298.257222101;
154 static constexpr double m0 = 0.9999;
155 static constexpr double n = 1 / (2 * F - 1);
156 static constexpr double n2 = power(n, 2);
157 static constexpr double n3 = power(n, 3);
158 static constexpr double n4 = power(n, 4);
159 static constexpr double n5 = power(n, 5);
160 static constexpr double alpha[6] = {
162 n / 2 - 2 * n2 / 3 + 5 * n3 / 16 + 41 * n4 / 180 - 127 * n5 / 288,
163 13 * n2 / 48 - 3 * n3 / 5 + 557 * n4 / 1440 + 281 * n5 / 630,
164 61 * n3 / 240 - 103 * n4 / 140 + 15061 * n5 / 26880,
165 49561 * n4 / 161280 - 179 * n5 / 168,
167 static constexpr double beta[6] = {
169 n / 2 - 2 * n2 / 3 + 37 * n3 / 96 - n4 / 360 - 81 * n5 / 512,
170 n2 / 48 + n3 / 15 - 437 * n4 / 1440 + 46 * n5 / 105,
171 17 * n3 / 480 - 37 * n4 / 840 - 209 * n5 / 4480,
172 4397 * n4 / 161280 - 11 * n5 / 504,
174 static constexpr double delta[6] = {
176 -2 * n2 / 3 - 2 * n3 / 3 + 4 * n4 / 9 + 2 * n5 / 9,
177 n2 / 3 - 4 * n3 / 15 - 23 * n4 / 45 + 68 * n5 / 45,
178 2 * n3 / 5 - 24 * n4 / 35 - 46 * n5 / 35,
179 83 * n4 / 126 - 80 * n5 / 63,
181 static constexpr double A[6] = {1 + n2 / 4 + n4 / 64, -3 * (n - n3 / 8 - n5 / 64) / 2,
182 15 * (n2 - n4 / 4) / 16, -35 * (n3 - 5 * n5 / 16) / 48,
183 315 * n4 / 512, -693 * n5 / 1280};
184 static constexpr double A_bar = m0 * a * A[0] / (1 + n);
187 double calc_S_bar_phi0(
const double & phi0_rad)
const;
192 void setReferencePoint(
int systemId);
GeodeticConverter class.
Definition: geodetic_converter.hpp:85
PlaneXY geo2xy(const Geodetic &latLon) const
Conversion from latitude and longitude to Cartesian coordinate system.
Definition: geodetic_converter.cpp:66
std::array< double, 3 > deg2dmg(const double °) const
decimal degrees to degrees-minutes-seconds converter
Definition: geodetic_converter.cpp:40
double dms2deg(const std::array< double, 3 > &dms)
degrees-minutes-seconds to decimal degrees converter
Definition: geodetic_converter.cpp:34
Geodetic getOrigin()
Get longitude and latitude that serve as the origin of the Cartesian coordinate system.
Definition: geodetic_converter.cpp:54
double rad2deg(double rad) const
radian to degree converter
Definition: geodetic_converter.cpp:52
double deg2rad(double deg) const
degree to radian converter
Definition: geodetic_converter.cpp:50
Geodetic xy2geo(const PlaneXY &planeXY) const
Conversion from Cartesian coordinate system to latitude and longitude.
Definition: geodetic_converter.cpp:105
For common.
Definition: udp.hpp:20
const std::array< std::array< double, 3 >, 2 > ORIGIN_POINTS_DMS[19]
Origin data for the Cartesian coordinate system.
Definition: geodetic_converter.hpp:26
Structure of latitude longitude.
Definition: geodetic_converter.hpp:52
double latitude
Definition: geodetic_converter.hpp:53
double longitude
Definition: geodetic_converter.hpp:54
double meridian_convergence
Definition: geodetic_converter.hpp:55
double scale_coefficient
Definition: geodetic_converter.hpp:56
Structure of Cartesian coordinate system.
Definition: geodetic_converter.hpp:63
double y
Definition: geodetic_converter.hpp:65
double meridian_convergence
Definition: geodetic_converter.hpp:66
double scale_coefficient
Definition: geodetic_converter.hpp:67
double x
Definition: geodetic_converter.hpp:64