IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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

MATLAB Discussion :

Affichage d'une trace GPS


Sujet :

MATLAB

  1. #1
    Membre à l'essai
    Inscrit en
    Janvier 2010
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 47
    Points : 21
    Points
    21
    Par défaut Affichage d'une trace GPS
    Bonjour,

    Voilà je récupère la trace GPS d'un bateau et j'aimerai pouvoir visualiser le déplacement du bateau sur un graphe (dans un premier temps) et avec une carte dans un second temps.

    Pour le moment, j'arrive à récupérer depuis mon log les valeurs de latitude et de longitude du déplacement du bateau. Elles sont définies en degré minutes minutes. Voici un exemple :

    Lat = [4743.6142N ; .....]
    Lon = [322.1970W ;.......]

    Les deux vecteurs étant de même longueur.

    Maintenant à partir de là je voudrai les afficher dans un graphe, je pensais utilisé la fonction geoshow mais il ne précise pas quel format il faut utiliser pour le vecteur latitude et longitude.

    Par la suite, je voudrai essayer de récupérer l'image de google map correspondant au parcours du bateau.

    Je sais pas si la dernière fonction est réalisable sous Matlab mais si quelqu'un a déjà réalisé ce genre de graphe je veux bien de l'aide.

    Merci.

  2. #2
    Expert confirmé
    Avatar de duf42
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Novembre 2007
    Messages
    3 111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    Points : 4 661
    Points
    4 661
    Par défaut
    Bonjour,

    Pour tracer tes coordonnées, peut-être que la fonction PLOT suffirait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    plot(Lat,Long, 'o');
    Pour la carte, si tu récupères une image tu peux superposer ton image (affichée avec IMAGE) et ton tracé de points (avec PLOT)

    Duf

  3. #3
    Membre à l'essai
    Inscrit en
    Janvier 2010
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 47
    Points : 21
    Points
    21
    Par défaut
    Merci pour la réponse.

    Peut être que le plot suffirait pour afficher mais je pensais trouver une fonction qui gère directement le format latitude longitude.

    Parce pour le moment, je me retrouve déjà bloqué à essayer de supprimer l'indication N ou W dans mon tableau longitude et latitude.

    Les 2 vecteur étant un tableau de cell! Comment faire pour les convertir en double tout en supprimant les indices (N ou w) ?

    Sinon pour ce qui est de la carte, je vais essayer de voir si je peux automatiser la recherche de l'image correspondante au tracer.

  4. #4
    Expert confirmé
    Avatar de duf42
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Novembre 2007
    Messages
    3 111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    Points : 4 661
    Points
    4 661
    Par défaut
    Une façon de le faire (la conversion):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Lat = regexp(Lat, '[0-9.]+', 'match');
    Lat = str2double([Lat {:}]);

  5. #5
    Membre à l'essai
    Inscrit en
    Janvier 2010
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 47
    Points : 21
    Points
    21
    Par défaut
    Merci pour cette réponse. J'arrive maintenant à récupérer les coordonnées GPS qui sont exprimées en degré,minutes,minutes decimal et il faut que je les repasse en minutes decimal.

    Mais je ne suis de nouveau bloqué pour récupérer dans les chaines de caractères les infos degrés et minutes décimal. Voilà le code que j'utilise pour le moment :

    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
     
    % Le vecteur Pos contient les lat&lon (exemple : 4743.6142N 00322.1970W)
     
    Lat = [];
    Lon = [];
    GPS_coor = regexp(Pos,' ','split');             % decoupe les position GPS en 2 colonnes (Lat, Lon)
    for i=1:1:size(Pos,1)
        Lat{i} = GPS_coor{i,1}{1,1};                % Sauvegarde des latitudes
        Lon{i} = GPS_coor{i,1}{1,2};                % Sauvegarde des longitudes
    end
     
    Lat = regexp(Lat(1,:),'[0-9.]+', 'match');      % Supprime l'indicateur Nord/Sud
    Lat = str2double([Lat{:}]);
    Lon = regexp(Lon(1,:),'[0-9.]+', 'match');      % Supprime l'indicateur Ouest/Est
    Lon = str2double([Lon{:}]);
    Je récupère donc les infos sous cette forme [DDmm.mmmm] et je voudrai maintenant récupérer DD ainsi que mm.mmmm.

    Mais pour le moment je trouve que la gestion des chaine de caractères est assez compliqué sous matlab, je pense que je vais finalement modifier l'enregistrement en Visual Basic pour avoir directement les latitudes et longitudes au bon format.

    Mais comme il faut quand même que je m'améliore sous Matlab si vous avez des solutions à Proposer je suis preneur.

    Sinon pour afficher la trajectoire du bateau, je pense utiliser Google Earth avec le programme GEplot disponible sur le lien suivant
    http://www.mathworks.com/matlabcentr...e/12948-geplot

  6. #6
    Expert confirmé
    Avatar de duf42
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Novembre 2007
    Messages
    3 111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    Points : 4 661
    Points
    4 661
    Par défaut
    L'avantage des expressions régulières (donc de REGEXP) c'est que tu peux faire tout ca en une seule commande:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    data = regexp(Pos, '([0-9]{2})([0-9]{2})\.([0-9]+)[A-Z] ([0-9]{2})([0-9]{2})\.([0-9]+)', 'tokens');
    Après il faut "juste" ce dépatouiller avec les tableaux de cellules.

    EDIT: Ca c'était la version complexe. Maintenant si toutes tes lignes ont le même nombre de caractères, tu peux t'en sortir beaucoup plus facilement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    % Conversion du tableau de cellules en chaine de caractères
    data = char(Pos);
     
    LatDD = str2num(data(:,[1 2]));
    Latmm =str2num(data(:,3:9)); 
     
    LongDD = str2num(data(:,[11 12]));
    Longmm =str2num(data(:,13:19));
    Bon c'est juste l'idée de base, faut voir si ca fonctionne sur tes données et si les indices sont corrects

  7. #7
    Membre à l'essai
    Inscrit en
    Janvier 2010
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 47
    Points : 21
    Points
    21
    Par défaut
    Oulala !! C'est la que je me rends compte que je suis encore un peu largué en Matlab.

    J'ai essayé la première solution mais me ramène un tableau vide mais je n'ai pas d'erreur ?

    Sinon la deuxième solution fonctionne correctement, il faut juste que je m'arrange pour avoir tout le temps le même nombre de caractère dans la chaine de caractère. Ensuite je convertie les positions GPS en degré décimal.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    GPS_coor = char(Pos);                                           % Conversion des donnees en chaine de caractères
     
    LatDD = str2num(GPS_coor(:,[1 2]));                             % Recupère les 2 premiers indices (degrees) pour la latitude
    Latmm = str2num(GPS_coor(:,3:9));                               % Recupère les minutes decimal pour la latitude
     
    LongDD = str2num(GPS_coor(:,[12 13 14]));                       % Recupère les 2 premiers indices (degrees) pour la longitude
    Longmm = str2num(GPS_coor(:,15:21));                            % Recupère les minutes decimal pour la longitude
     
     
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    %           Converti les donnees en degres decimal             %
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    Lat  = LatDD + Latmm./60;                                     
    Long = LongDD + Longmm./60;
    Mais pour la conversion, il faut que je compare l'indice pour la latitude (N correspond à + et S correspond à -) et la longitude (W correspond à - et E correspond à +).

    Je pense à une solution avec une boucle for mais je suppose qu'il y a encore une fonction qui me permettrait de ne pas faire de boucle for ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    for i=1:1:size(Lat,1)
        if (GPS_coor(:,[10])== 'S')
            Lat(i) = - Lat(i);
        end 
        if (GPS_coor(:,[22])== 'W')
            Long(i) = - Long(i);
        end
    end
    Voilà la solution qui me vient en tête !!!

    Encore Merci pour ton coup de main

  8. #8
    Expert confirmé
    Avatar de duf42
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Novembre 2007
    Messages
    3 111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 111
    Points : 4 661
    Points
    4 661
    Par défaut
    Oui, on peut se passer de la boucle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Lat(GPS_coor(:,10)== 'S') = - Lat(GPS_coor(:,10)== 'S');
    Long(GPS_coor(:,22)== 'W') = - Long(GPS_coor(:,22)== 'W');

Discussions similaires

  1. Centrage automatique sur une trace GPS
    Par Gustry dans le forum IGN API Géoportail
    Réponses: 11
    Dernier message: 12/11/2011, 12h54
  2. affichage d'une trace gpx par un clic sur un POI
    Par bauschr dans le forum IGN API Géoportail
    Réponses: 5
    Dernier message: 05/08/2011, 13h24
  3. Affichage d'une boite de dialogue nonmodale avec MFC
    Par the.cable.guy dans le forum Windows
    Réponses: 3
    Dernier message: 04/07/2003, 18h59
  4. Affichage d'une image sous linux
    Par Braim dans le forum x86 32-bits / 64-bits
    Réponses: 5
    Dernier message: 25/03/2003, 11h41
  5. probléme d'affichage d'une fiche
    Par sb dans le forum Composants VCL
    Réponses: 7
    Dernier message: 29/08/2002, 10h43

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