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
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    avril 2011
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Finance

    Informations forums :
    Inscription : avril 2011
    Messages : 70
    Points : 72
    Points
    72

    Par défaut 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
    Images attachées Images attachées   
    Fichiers attachés Fichiers attachés

  2. #2
    Membre chevronné

    Homme Profil pro
    Formation: Chimie et Physique (structure de la matière)
    Inscrit en
    décembre 2010
    Messages
    959
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Formation: Chimie et Physique (structure de la matière)
    Secteur : Enseignement

    Informations forums :
    Inscription : décembre 2010
    Messages : 959
    Points : 1 831
    Points
    1 831
    Billets dans le blog
    5

    Par défaut 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

Discussions similaires

  1. Conversion de coordonnées polaires en cartésiennes
    Par Ben-o dans le forum Mathématiques
    Réponses: 7
    Dernier message: 21/01/2015, 17h47
  2. Coordonnées GPS vers Lambert 93 avec Open Layers
    Par Gustry dans le forum SIG : Système d'information Géographique
    Réponses: 0
    Dernier message: 30/11/2010, 17h32
  3. Programme Delphi de conversion de coordonnées GPS/UTM
    Par furious-kiki dans le forum Delphi
    Réponses: 4
    Dernier message: 10/01/2007, 11h19
  4. Surface d'un triangle en coordonnées cartésiennes
    Par tlemcenvisit dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 11/06/2005, 20h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo