1 | /*********************************************************************
|
---|
2 | // created: 2007/04/12 - 16:30
|
---|
3 |
|
---|
4 | //
|
---|
5 | // author: Elie Al Alam & Gerald Dherbomez
|
---|
6 | //
|
---|
7 | // version: $Id: DbtPlyGgaManager.cpp 1203 2012-08-02 11:58:15Z morasjul $
|
---|
8 | //
|
---|
9 | // purpose: Dbite Player GGA Manager implementation
|
---|
10 | *********************************************************************/
|
---|
11 |
|
---|
12 | #include "DbtPlyGgaManager.h"
|
---|
13 |
|
---|
14 | #include <cmath>
|
---|
15 | #include <qapplication.h>
|
---|
16 |
|
---|
17 | //#include "kernel/ComponentManager.h"
|
---|
18 |
|
---|
19 | namespace pacpus {
|
---|
20 |
|
---|
21 | //////////////////////////////////////////////////////////////////////////
|
---|
22 | // Construction de la fabrique de composant DbtPlyGgaManager
|
---|
23 | //////////////////////////////////////////////////////////////////////////
|
---|
24 | static ComponentFactory<DbtPlyGgaManager> sFactory("DbtPlyGgaManager");
|
---|
25 |
|
---|
26 | // double dist1[2];
|
---|
27 | // double dist2[2];
|
---|
28 |
|
---|
29 | double atanh(double z)
|
---|
30 | {
|
---|
31 | return (0.5 * log((z+1)/(1-z)));
|
---|
32 | }
|
---|
33 |
|
---|
34 | double abs_me(double x)
|
---|
35 | {
|
---|
36 | if(x<0) x=-x;
|
---|
37 | return x;
|
---|
38 | }
|
---|
39 |
|
---|
40 |
|
---|
41 |
|
---|
42 |
|
---|
43 | //////////////////////////////////////////////////////////////////////////
|
---|
44 | //transformation des longitudes tatitudes en Lambert93
|
---|
45 | //////////////////////////////////////////////////////////////////////////
|
---|
46 | void lonlattolam(double lon, double lat, double & lam93x, double & lam93y)
|
---|
47 | {
|
---|
48 | double GRS_a = 6378137;
|
---|
49 | double GRS_f = 1/298.257222101;
|
---|
50 |
|
---|
51 | double GRS_b = GRS_a*(1-GRS_f);
|
---|
52 | double GRS_bb= GRS_b*GRS_b;
|
---|
53 | double GRS_aa= 40680631590769.0;
|
---|
54 | double GRS_e = sqrt((GRS_aa - GRS_bb) / (GRS_aa));
|
---|
55 |
|
---|
56 | double n = 0.725607765053267;
|
---|
57 | double C = 11754255.4261;
|
---|
58 | double XS = 700000;
|
---|
59 | double YS = 12655612.0499;
|
---|
60 |
|
---|
61 | double latiso;
|
---|
62 | latiso = atanh(sin(lat)) - GRS_e*atanh(GRS_e*sin(lat));
|
---|
63 | double gamma;
|
---|
64 | gamma = (lon - 0.0523598775598299)*n;
|
---|
65 | double R;
|
---|
66 | R = C * exp(-n*latiso);
|
---|
67 |
|
---|
68 | lam93x = R *sin(gamma)+XS;
|
---|
69 | lam93y = -R *cos(gamma)+YS;
|
---|
70 | }
|
---|
71 |
|
---|
72 |
|
---|
73 |
|
---|
74 |
|
---|
75 |
|
---|
76 | //////////////////////////////////////////////////////////////////////////
|
---|
77 | //Transformation des coordonnees de Lambert93 en Longitude lattitude
|
---|
78 | //////////////////////////////////////////////////////////////////////////
|
---|
79 | void lamtolonlat(double lamx, double lamy, double & lon, double & lat)
|
---|
80 | {
|
---|
81 | double GRS_a = 6378137;
|
---|
82 | double GRS_f = 1/298.257222101;
|
---|
83 | double GRS_b = GRS_a*(1-GRS_f);
|
---|
84 | double GRS_bb= GRS_b*GRS_b;
|
---|
85 | double GRS_aa= 40680631590769.0;
|
---|
86 | double GRS_e = sqrt((GRS_aa - GRS_bb) / (GRS_aa));
|
---|
87 |
|
---|
88 | //double n = 0.725607765053267;
|
---|
89 | //double C = 11754255.4261;
|
---|
90 | //double XS = 700000;
|
---|
91 | //double YS = 12655612.0499;
|
---|
92 |
|
---|
93 |
|
---|
94 | //lamx = lamx-700000;
|
---|
95 | //lamy = lamy-12655612.0499;
|
---|
96 |
|
---|
97 | double gamma;
|
---|
98 | gamma = atan(-(lamx-700000)/(lamy-12655612.0499));
|
---|
99 |
|
---|
100 |
|
---|
101 | lon = gamma/0.725607765053267 + 0.0523598775598299;
|
---|
102 | double R;
|
---|
103 | R = sqrt((lamx-700000) * (lamx-700000) + (lamy-12655612.0499) * (lamy-12655612.0499));
|
---|
104 |
|
---|
105 | double latiso;
|
---|
106 | latiso = log((11754255.4261)/R)/(0.725607765053267);
|
---|
107 |
|
---|
108 | double phiNew, phiOld;
|
---|
109 | phiOld =1;
|
---|
110 | phiNew= asin (tanh ( latiso + GRS_e * atanh(GRS_e * sin(phiOld))));
|
---|
111 | //printf("\nphiNew: %.20lf",phiNew);
|
---|
112 | while (abs_me(phiOld-phiNew) > 1e-10)
|
---|
113 | {
|
---|
114 |
|
---|
115 | if(abs_me(phiOld-phiNew) > 1e-10)
|
---|
116 | {
|
---|
117 |
|
---|
118 | phiOld = phiNew;
|
---|
119 | phiNew = asin(tanh(latiso+GRS_e*atanh(GRS_e*sin(phiOld))));
|
---|
120 | }
|
---|
121 | else
|
---|
122 | phiOld = phiNew;
|
---|
123 | }
|
---|
124 |
|
---|
125 | lat = phiNew;
|
---|
126 | }
|
---|
127 |
|
---|
128 |
|
---|
129 |
|
---|
130 |
|
---|
131 |
|
---|
132 | //////////////////////////////////////////////////////////////////////////
|
---|
133 | /// Constructor
|
---|
134 | DbtPlyGgaManager::DbtPlyGgaManager(QString name)
|
---|
135 | : DbtPlyFileManager(name)
|
---|
136 | {
|
---|
137 |
|
---|
138 | }
|
---|
139 |
|
---|
140 | //////////////////////////////////////////////////////////////////////////
|
---|
141 | /// Destructor
|
---|
142 | DbtPlyGgaManager::~DbtPlyGgaManager()
|
---|
143 | {
|
---|
144 |
|
---|
145 | }
|
---|
146 |
|
---|
147 | //////////////////////////////////////////////////////////////////////////
|
---|
148 | // displayData
|
---|
149 | //////////////////////////////////////////////////////////////////////////
|
---|
150 | void DbtPlyGgaManager::processData(road_time_t t, road_timerange_t /*tr*/ , void * buf)
|
---|
151 | {
|
---|
152 | // no data available
|
---|
153 | if (buf == NULL) {
|
---|
154 | printf("NULL");
|
---|
155 | emit displayLat(0);
|
---|
156 | emit displayLon(0);
|
---|
157 | }
|
---|
158 |
|
---|
159 | val = (trame_gga_dbl*)(buf);
|
---|
160 |
|
---|
161 |
|
---|
162 | emit displayLat(val->lat);
|
---|
163 | emit displayLon(val->lon);
|
---|
164 |
|
---|
165 | }
|
---|
166 |
|
---|
167 | ComponentBase::COMPONENT_CONFIGURATION DbtPlyGgaManager::configureComponent(XmlComponentConfig config)
|
---|
168 | {
|
---|
169 | DbtPlyFileManager::configureComponent(config);
|
---|
170 |
|
---|
171 | return ComponentBase::CONFIGURED_OK;
|
---|
172 | }
|
---|
173 |
|
---|
174 |
|
---|
175 |
|
---|
176 |
|
---|
177 | void DbtPlyGgaManager::startActivity()
|
---|
178 | {
|
---|
179 | DbtPlyFileManager::startActivity();
|
---|
180 | // user interface
|
---|
181 | }
|
---|
182 |
|
---|
183 |
|
---|
184 |
|
---|
185 |
|
---|
186 | void DbtPlyGgaManager::stopActivity()
|
---|
187 | {
|
---|
188 | DbtPlyFileManager::stopActivity();
|
---|
189 | }
|
---|
190 |
|
---|
191 |
|
---|
192 | void DbtPlyGgaManager::displayUI()
|
---|
193 | {
|
---|
194 | // todo
|
---|
195 | // afficher lat lon
|
---|
196 | // voir dans DbtPlyUserInterface§.cpp
|
---|
197 | w = new QWidget();
|
---|
198 | w->setWindowTitle(name());
|
---|
199 | w->show();
|
---|
200 | w->setFixedSize (170,80);
|
---|
201 |
|
---|
202 | prop = new QGroupBox ("GGA Properties",w);
|
---|
203 | prop->show();
|
---|
204 | prop->setFixedSize(170,78);
|
---|
205 |
|
---|
206 | lat = new QLabel("Latitude ", prop);
|
---|
207 | lat->move( 5, 15);
|
---|
208 | lat->show();
|
---|
209 | lat->setFixedSize (80,20);
|
---|
210 | latVal = new QLCDNumber (prop);
|
---|
211 | latVal->move( 5, 35);
|
---|
212 | latVal->setFixedSize(50,20);
|
---|
213 | latVal->show();
|
---|
214 | connect(this, SIGNAL(displayLat(double)) , latVal , SLOT(display(double)));
|
---|
215 |
|
---|
216 | lon = new QLabel("Longitude ", prop);
|
---|
217 | lon->move( 90, 15);
|
---|
218 | lon->show();
|
---|
219 | lon->setFixedSize (80,27);
|
---|
220 |
|
---|
221 | lonVal = new QLCDNumber (prop);
|
---|
222 | lonVal->move( 90, 35);
|
---|
223 | lonVal->setFixedSize(50,20);
|
---|
224 | lonVal->show();
|
---|
225 | connect (this, SIGNAL(displayLon(double)) , lonVal , SLOT(display(double)));
|
---|
226 | }
|
---|
227 |
|
---|
228 | } // namespace pacpus |
---|