Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

  1. #1
    Membre régulier
    Conversion de coordonnées GPS vers coordonnées cartésiennes
    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

    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 ); 	
    }


    => quelle est la bonne formule pour convertir des coordonnées GPS en coordonnées cartésiennes ?
    (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

    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 ); 
    }


    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

  2. #2
    Membre chevronné
    Conversion coordonnées GPS vers coordonnées cartésiennes
    Bonjour,

    Si l'on utilise un repère orthonormé direct (Oxyz), dont l'origine coïncide avec le centre de la terre supposée sphérique et (z'z) avec l'axe des pôles orienté du Sud vers le Nord, alors le changement de coordonnées est obtenu par les relations:

    x = R*Cos(Lat)*Cos(Lon) ;
    y = R*Cos(Lat)*Sin(Lon) ;
    z:= R*Sin(Lat) .

    Le méridien de Greenwitch (Lon = 0) appartient au demi-plan contenant l'axe des pôles (z'z, Ox).
    On s'assure très simplement que la relation de Pythagore est vérifiée: x2 + y2 + z2 = R2 .

    (R) représente le rayon moyen de la planète, et vaut 6 371,009 km.


    Le français, notre affaire à tous
    Grand Dictionnaire Terminologique