Bonjour,
Je voudrais automatiquement convertir une position GPS en une position cartésienne en 3D
J'ai essayé cette formule pour convertir les coordonnée GPS {latitude, longitude } en coordonnées cartésiennes {x, y, z} mais les coordonnées GPS ne semblent pas être la même chose que les coordonnées sphériques
=> quelle est la bonne formule pour convertir des coordonnées GPS en coordonnées cartésiennes ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 void Spheric2cartesian( double rayon, double latitude, double longitude, double *x, double *y, double *z ) { *x = rayon * cos( latitude ) * cos( longitude ); *y = rayon * cos( latitude ) * sin ( longitude ); *z = rayon * sin( latitude ); }
(seulement une conversion approximative, en limitant les calculs en estimant que la Terre est parfaitement sphérique par exemple, ce sera le plus simple pour commencer)
J'utilise ce boût de code pour afficher une droite perpendiculaire à une sphère sur laquelle j'ai mappé un mappemonde
J'y ai utilisées les valeurs latadapt=0.78 et longadapt=0.71 qui marchent bien pour la France mais pas pour les autres pays alors que je voudrais une formule générale qui marche avec toutes les coordonnées GPS que je lui donnerais en entrée
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 void DrawCity( int id, char *name, double latitude, double longitude ) { double x, y , z; Spheric2cartesian( rayon, latitude + latadapt, longitude + longadapt, &x, &y, &z); printf("GPS(\"%s\", latitude=%.4f, longitude=%.4f) => xyz( %.3f, %.3f %.3f ) \n", name, latitude, longitude, x, y, z ); glColor3f( 1.0f, 1.0f, 1.0f ); glLineWidth(3.0f); glBegin(GL_LINES); glVertex3f( 0.0f, 0.0f, 0.0f ); glVertex3f( -x , y, -z ); glEnd(); } void DrawCities() { if ( bCountries[HOLLANDE] ) DrawCity( 0, "Hollande", 51.8965, 5.0592 ); if ( bCountries[BALEARES] ) DrawCity( 1, "Baléares", 39.5696, 2.6501 ); if ( bCountries[NORVEGE] ) DrawCity( 2, "Norvège", 61.6339, 9.3839 ); if ( bCountries[MAROC] ) DrawCity( 3, "Maroc", 32.6924, -6.7059 ); if ( bCountries[FRANCE] ) DrawCity( 4, "France", 46.6652, 2.4093 ); if ( bCountries[CROATIE] ) DrawCity( 5, "Croatie", 44.9425, 15.3076 ); if ( bCountries[MADAGASCAR] ) DrawCity( 6, "Madagascar", -19.6331, 46.8769 ); }
Partager