1 | /*
|
---|
2 | * crs.h
|
---|
3 | *
|
---|
4 | * Created on: Jun 18, 2024
|
---|
5 | * Author: stuerze
|
---|
6 | */
|
---|
7 |
|
---|
8 | #ifndef SRC_RTCM3_CRS_H_
|
---|
9 | #define SRC_RTCM3_CRS_H_
|
---|
10 |
|
---|
11 | #include <cstring>
|
---|
12 | #include <iostream>
|
---|
13 | #include <iomanip>
|
---|
14 | using namespace std;
|
---|
15 |
|
---|
16 | class t_serviceCrs {
|
---|
17 | public:
|
---|
18 | t_serviceCrs() {
|
---|
19 | _coordinateEpoch = 0;
|
---|
20 | _CE = 0;
|
---|
21 | }
|
---|
22 | ~t_serviceCrs() {
|
---|
23 | clear();
|
---|
24 | }
|
---|
25 | void clear(void) {
|
---|
26 | memset(_name, '\0', 31 * sizeof(char));
|
---|
27 | _coordinateEpoch = 0;
|
---|
28 | _CE = 0;
|
---|
29 | }
|
---|
30 | void print() {
|
---|
31 | cout << "=============" << endl;
|
---|
32 | cout << "service Crs" << endl;
|
---|
33 | cout << "=============" << endl;
|
---|
34 | cout << QString("%1").arg(_name).toStdString().c_str() << endl;
|
---|
35 | cout << "_coordinateEpoch: " << _coordinateEpoch << endl;
|
---|
36 | cout << "_CE: " << _CE << endl;
|
---|
37 | }
|
---|
38 | void setCoordinateEpochFromCE() {(!_CE) ? _coordinateEpoch = 0.0 : _coordinateEpoch = 1900 + _CE; }
|
---|
39 | void setCEFromCoordinateEpoch() {(!_coordinateEpoch) ? _CE = 0 : _CE = _coordinateEpoch -1900; }
|
---|
40 | char _name[31];
|
---|
41 | double _coordinateEpoch;
|
---|
42 | double _CE;
|
---|
43 | };
|
---|
44 |
|
---|
45 |
|
---|
46 | class t_rtcmCrs {
|
---|
47 | public:
|
---|
48 | t_rtcmCrs() {
|
---|
49 | _anchor = 0;
|
---|
50 | _plateNumber = 0;
|
---|
51 | }
|
---|
52 |
|
---|
53 | ~t_rtcmCrs() {
|
---|
54 | clear();
|
---|
55 | }
|
---|
56 | void clear() {
|
---|
57 | memset(_name, '\0', 31 * sizeof(char));
|
---|
58 | _anchor = 0;
|
---|
59 | _plateNumber = 0;
|
---|
60 | _databaseLinks.clear();
|
---|
61 | }
|
---|
62 | void print() {
|
---|
63 | cout << "=============" << endl;
|
---|
64 | cout << "rtcm Crs" << endl;
|
---|
65 | cout << "=============" << endl;
|
---|
66 | cout << QString("%1").arg(_name).toStdString().c_str() << endl;
|
---|
67 | cout << "_anchor: " << _anchor << endl;
|
---|
68 | cout << "_plateNumber: " << _plateNumber << endl;
|
---|
69 | for (int i = 0; i<_databaseLinks.size(); i++){
|
---|
70 | cout << _databaseLinks[i].toStdString() << endl;
|
---|
71 | }
|
---|
72 | }
|
---|
73 | char _name[31];
|
---|
74 | int _anchor; // 0.. global CRS (=> Plate number 0), 1.. plate-fixed CRS
|
---|
75 | int _plateNumber; // 0.. unknown, 7.. Eurasia
|
---|
76 | QStringList _databaseLinks;
|
---|
77 | };
|
---|
78 |
|
---|
79 | class t_helmertPar {
|
---|
80 | public:
|
---|
81 | t_helmertPar() {
|
---|
82 | _sysIdentNum = 0;
|
---|
83 | _utilTrafoMessageIndicator = 0;
|
---|
84 | _t0 = 0;
|
---|
85 | _dx = 0.0;
|
---|
86 | _dy = 0.0;
|
---|
87 | _dz = 0.0;
|
---|
88 | _dxr = 0.0;
|
---|
89 | _dyr = 0.0;
|
---|
90 | _dzr = 0.0;
|
---|
91 | _ox = 0.0;
|
---|
92 | _oy = 0.0;
|
---|
93 | _oz = 0.0;
|
---|
94 | _oxr = 0.0;
|
---|
95 | _oyr = 0.0;
|
---|
96 | _ozr = 0.0;
|
---|
97 | _sc = 0.0;
|
---|
98 | _scr = 0.0;
|
---|
99 | }
|
---|
100 |
|
---|
101 | QString IndtoString() {
|
---|
102 | int ind = _utilTrafoMessageIndicator;
|
---|
103 | QString str = "";
|
---|
104 | if (!ind) {
|
---|
105 | str += " not utillized";
|
---|
106 | return str;
|
---|
107 | }
|
---|
108 | // Bit 0
|
---|
109 | if (ind & (1<<0)) {
|
---|
110 | str += "MT1023 ";
|
---|
111 | }
|
---|
112 | // Bit 1
|
---|
113 | if (ind & (1<<1)) {
|
---|
114 | str += "MT1024 ";
|
---|
115 | }
|
---|
116 | // Bit 2
|
---|
117 | if (ind & (1<<2)) {
|
---|
118 | str += "MT1025 ";
|
---|
119 | }
|
---|
120 | // Bit 3
|
---|
121 | if (ind & (1<<3)) {
|
---|
122 | str += "MT1026 ";
|
---|
123 | }
|
---|
124 | // Bit 4
|
---|
125 | if (ind & (1<<4)) {
|
---|
126 | str += "MT1027 ";
|
---|
127 | }
|
---|
128 | // 5 -9
|
---|
129 | if (!(ind & (1<<5)) &&
|
---|
130 | !(ind & (1<<6)) &&
|
---|
131 | !(ind & (1<<7)) &&
|
---|
132 | !(ind & (1<<8)) &&
|
---|
133 | !(ind & (1<<9))) {
|
---|
134 | str += "(and Bit 5-9 is reserved => zero)";
|
---|
135 | }
|
---|
136 | return str;
|
---|
137 | }
|
---|
138 | bool operator==(const t_helmertPar& helmertPar1) const {
|
---|
139 | if (strncmp(_sourceName, helmertPar1._sourceName, strlen(_sourceName)) == 0 &&
|
---|
140 | strncmp(_targetName, helmertPar1._targetName, strlen(_targetName)) == 0 &&
|
---|
141 | _sysIdentNum == helmertPar1._sysIdentNum &&
|
---|
142 | _t0 == helmertPar1._t0) {
|
---|
143 | return true;
|
---|
144 | }
|
---|
145 | else {
|
---|
146 | return false;
|
---|
147 | }
|
---|
148 | }
|
---|
149 | void print() {
|
---|
150 | cout << "MT 1301: " << endl;
|
---|
151 | cout << "_sourceName: " << _sourceName << endl;
|
---|
152 | cout << "_targetName: " << _targetName << endl;
|
---|
153 | cout << "_sysIdentNum: " << _sysIdentNum << endl;
|
---|
154 | cout << "_utilTrafoMessageIndicator: " << IndtoString().toStdString().c_str() << endl;
|
---|
155 | bncTime t; t.setmjd(0, _t0);
|
---|
156 | cout << "_t0 : " << "MJD " << _t0 << " (" << t.datestr() << ")" << endl;
|
---|
157 | cout <<setw(10) << setprecision(5) << "_dx : " << _dx << endl;
|
---|
158 | cout <<setw(10) << setprecision(5) << "_dy : " << _dy << endl;
|
---|
159 | cout <<setw(10) << setprecision(5) << "_dz : " << _dz << endl;
|
---|
160 | cout <<setw(10) << setprecision(7) << "_dxr : " << _dxr << endl;
|
---|
161 | cout <<setw(10) << setprecision(7) << "_dyr : " << _dyr << endl;
|
---|
162 | cout <<setw(10) << setprecision(7) << "_dzr : " << _dzr << endl;
|
---|
163 | cout <<setw(10) << setprecision(5) << "_ox : " << _ox << endl;
|
---|
164 | cout <<setw(10) << setprecision(5) << "_oy : " << _oy << endl;
|
---|
165 | cout <<setw(10) << setprecision(5) << "_oz : " << _oz << endl;
|
---|
166 | cout <<setw(10) << setprecision(7) << "_oxr : " << _oxr << endl;
|
---|
167 | cout <<setw(10) << setprecision(7) << "_oyr : " << _oyr << endl;
|
---|
168 | cout <<setw(10) << setprecision(7) << "_ozr : " << _ozr << endl;
|
---|
169 | cout <<setw(10) << setprecision(5) << "_sc : " << _sc << endl;
|
---|
170 | cout <<setw(10) << setprecision(7) << "_scr : " << _scr << endl;
|
---|
171 | cout << endl;
|
---|
172 | }
|
---|
173 | char _sourceName[31];
|
---|
174 | char _targetName[31];
|
---|
175 | int _sysIdentNum;
|
---|
176 | int _utilTrafoMessageIndicator;
|
---|
177 | int _t0; // reference epoch
|
---|
178 | double _dx; // translation in x
|
---|
179 | double _dy; // translation in y
|
---|
180 | double _dz; // translation in z
|
---|
181 | double _dxr; // translation rate in x
|
---|
182 | double _dyr; // translation rate in y
|
---|
183 | double _dzr; // translation rate in z
|
---|
184 | double _ox; // rotation in x
|
---|
185 | double _oy; // rotation in y
|
---|
186 | double _oz; // rotation in z
|
---|
187 | double _oxr; // rotation rate in x
|
---|
188 | double _oyr; // rotation rate in y
|
---|
189 | double _ozr; // rotation rate in z
|
---|
190 | double _sc; // scale
|
---|
191 | double _scr; // scale rate
|
---|
192 | };
|
---|
193 |
|
---|
194 |
|
---|
195 | #endif /* SRC_RTCM3_CRS_H_ */
|
---|