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

Python Discussion :

matplotlib et coordonées GPS


Sujet :

Python

  1. #1
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Février 2023
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2023
    Messages : 89
    Par défaut matplotlib et coordonées GPS
    Bonjour je rencontre un problème avec mon code qui permet d'afficher des coordonées gps (en principe), je ne comprends pas ou se trouve mon erreur, les points gps s'affichent mais de façon aléatoire.

    Voici mon code:

    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    import serial
    import matplotlib.pyplot as plt
     
    def parse_gps_data(gps_data):
        # Séparer les champs de la trame GPS en utilisant la virgule comme séparateur
        fields = gps_data.split(',')
     
        # Vérifier si la trame est GNGGA (données de position)
        if fields[0] == '$GNGGA':
            try:
                # Extraire la latitude et la longitude
                latitude = float(fields[2][:2]) + float(fields[2][2:]) / 60
                longitude = float(fields[4][:3]) + float(fields[4][3:]) / 60
     
                # Vérifier la direction de la latitude (N ou S)
                if fields[3] == 'S':
                    latitude = -latitude
     
                # Vérifier la direction de la longitude (E ou W)
                if fields[5] == 'W':
                    longitude = -longitude
     
                return latitude, longitude
            except Exception as e:
                print("Erreur lors de l'extraction des coordonnées:", e)
                return None
     
    # Définition du port série
    ser = serial.Serial('COM13', 115200)  # Assurez-vous de changer le port selon votre configuration
     
    # Tracer les points GPS en temps réel
    plt.figure(figsize=(8, 6))
    plt.xlabel('Longitude')
    plt.ylabel('Latitude')
    plt.title('Trajet GPS en temps réel')
    #plt.xlim(43.7,43.9)
    #plt.ylim(5.07,5.09)
     
    plt.grid(True)
     
    try:
        while True:
            # Lire une ligne de données depuis le port série
            gps_data = ser.readline().decode(errors='ignore').strip()  # Ignorer les erreurs de décodage
     
            # Analyser les données GPS et afficher les coordonnées
            coordinates = parse_gps_data(gps_data)
            #coordinates = 43.86819841166667, 5.084892288333333
            if coordinates:
                latitude, longitude = coordinates
                print (latitude,longitude)
     
                # Tracer le point GPS en temps réel
                plt.plot(longitude, latitude, '.', markersize=3)
                plt.draw()  # Rafraîchir l'affichage
                plt.pause(0.01)  # Pause pour rafraîchir l'affichage
     
    except KeyboardInterrupt:
        ser.close()
        print("Programme arrêté.")
    Voila le genre d'affichage que j'obtiens:
    Nom : bug_matplot.png
Affichages : 456
Taille : 85,7 Ko

    quelqu'un peut t'il m'aider?

  2. #2
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Février 2023
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2023
    Messages : 89
    Par défaut
    J'ai refais des tests, j'ai enregistré mes point gps dans un fichier txt puis j'ai essayé de les affichers avec matplotlib et j'ai le même résulat, sa semble venir de la librairie.

    Peu etre qu'il y a trop de chiffres aprés la virgule dans mes coordonées gps.

  3. #3
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 199
    Par défaut
    Hello,
    es tu sûr de ta fonction d'extraction (parse_gps_data) ? La division par 60 me paraît bizarre . Peux tu nous montrer quelques lignes de tes trames GNGGA ?
    Ami calmant, J.P

  4. #4
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Février 2023
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2023
    Messages : 89
    Par défaut
    Bonjour, oui voici quelques trames, j'utilise un gps rtk (valeurs corrigées par une base)

    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
    $GNVTG,,T,,M,0.010,N,0.018,K,D*30
    $GNGGA,173038.00,4352.0919470,N,00505.0941905,E,5,12,0.55,86.263,M,47.710,M,1.0,0000*5A
    $GNGSA,A,3,04,17,21,03,19,28,31,09,06,02,,,1.05,0.55,0.89,1*0B
    $GNGSA,A,3,72,71,85,86,87,70,,,,,,,1.05,0.55,0.89,2*0F
    $GNGSA,A,3,03,13,05,34,15,08,,,,,,,1.05,0.55,0.89,3*09
    $GNGSA,A,3,20,09,22,16,29,19,,,,,,,1.05,0.55,0.89,4*0E
    $GPGSV,3,1,10,02,41,137,39,03,68,037,35,04,68,175,36,06,22,310,22,1*68
    $GPGSV,3,2,10,09,31,211,32,17,45,256,38,19,38,292,39,21,25,136,33,1*61
    $GPGSV,3,3,10,28,14,042,23,31,24,071,35,1*69
    $GPGSV,2,1,07,03,68,037,37,04,68,175,36,06,22,310,29,09,31,211,18,6*69
    $GPGSV,2,2,07,17,45,256,31,28,14,042,35,31,24,071,27,6*58
    $GLGSV,3,1,10,70,42,037,29,71,76,284,43,72,30,236,31,79,06,025,27,1*72
    $GLGSV,3,2,10,80,03,073,15,85,37,156,41,86,83,275,40,87,31,326,34,1*71
    $GLGSV,3,3,10,,,,34,,,,37,1*7A
    $GLGSV,2,1,07,71,76,284,34,72,30,236,19,79,06,025,33,80,03,073,19,3*71
    $GLGSV,2,2,07,85,37,156,28,86,83,275,32,,,,37,3*7C
    La trame importante est celle-ci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $GNGGA,173038.00,4352.0919470,N,00505.0941905,E,5,12,0.55,86.263,M,47.710,M,1.0,0000*5A
    J'ai essayé d'afficher ceci, toujours le même problème:

    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
    Latitude,Longitude
    43.86820657166667,5.084916285
    43.868206578333336,5.084916285
    43.86820658,5.08491626
    43.868206568333335,5.084916225
    43.868206535,5.084916235
    43.868206533333336,5.08491621
    43.868206568333335,5.084916223333333
    43.868206535,5.0849162366666665
    43.868206558333334,5.084916235
    43.86820656166667,5.084916215
    43.86820656333333,5.0849162266666665
    43.868206576666665,5.084916263333334
    43.868206558333334,5.084916216666667
    43.868206545,5.0849162366666665
    43.868206535,5.084916248333333
    43.86820656333333,5.08491626
    43.868206545,5.084916251666667
    43.868206558333334,5.084916215
    Je ne comprends toujours pas pourquoi sa ne s'affiche pas correctement sur matplotlib.

    Sur la prise d'écran on peux voir la latitude et longitude. On divise par 60 car c'est pour obtenir des degrés decimal et nom pas degres minutes.

  5. #5
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 199
    Par défaut
    une question bête :
    pourquoi afficher des coordonnées gps dans matplotlib et pas sur une carte (cartographie) ?

  6. #6
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Février 2023
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2023
    Messages : 89
    Par défaut
    Salut; en fait je suis au début de projet d'une tondeuse autonome, et donc je cherche a afficher la positions des points gps qui seront tres prochent les un des autres, (maximum 2 metres).

    Je cherche donc pour débuter afficher les points gps lorsque l'antenne est fixe, normalement je devrais avoir une variation de maximum 10cm grace au gps rtk.

  7. #7
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 199
    Par défaut
    Hello,
    J'ai testé tes coordonnées gps dans un fichier avec ce code :
    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
    import matplotlib.pyplot as plt
     
    # Tracer les points GPS 
    plt.figure(figsize=(8, 6))
    plt.xlabel('Longitude')
    plt.ylabel('Latitude')
    plt.title('Trajet GPS en temps réel')
    #plt.xlim(43.7,43.9)
    #plt.ylim(5.07,5.09)
    plt.grid(True)
     
    try:
        file1 = open('d:/temp/coordsGPS.txt', 'r')
        Lines = file1.readlines()
        for line in Lines:
            if 'Latitude' in line:
                continue
            coordinates = line.strip().split(',')
            if coordinates:
                latitude, longitude = coordinates
                lat = float(latitude)
                lon = float(longitude)
                print (lat,lon)
     
                # Tracer le point GPS en temps réel
                plt.plot(lon, lat, '.', markersize=3)
                plt.draw()  # Rafraîchir l'affichage
                plt.pause(0.01)  # Pause pour rafraîchir l'affichage
     
    except KeyboardInterrupt:
        print("Programme arrêté.")
    et voilà ce que cela donne :
    Nom : matplotlibGPS.png
Affichages : 363
Taille : 29,9 Ko


    en fait matplotlib n'affiche pas des points aléatoires mais affiche la zone où il y a des points.


    par exemple que veut dire 1e-8 + 4.38682065e1 pour y et 1e-8 + 5.0849162 pour x
    Cela signifie que chaque nombre y sur l’axe vertical est en réalité y * 10**-8 + 4.38682065 * 10**1 et que chaque nombre x sur l'axe horizontal est en réalité x * 10**-8 + 5.0849162


    En d’autres termes, les points sont proches du point 43.8682065,5.0849162 avec un écart additionnel de l’ordre de 10**-8, ce qui est un très petit nombre.

    Par exemple sur la figure 1 le point qui se trouve à l'intersection du x = 6 et du y = 8 correspond au point 43.86820658,5.08491626


    ​Ami calmant, J.P

  8. #8
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Février 2023
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2023
    Messages : 89
    Par défaut
    Merci, je ne pensez pas que les données étaient juste...

    Je pensais à une erreur de matplotlib

    Curieux , j'ai une dérive des points, comme vous l'avez dit le déplacement semble insignifiant, je pensais obtenir un nuage de points en forme de cercles car mon antenne est fixe.

  9. #9
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Février 2023
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2023
    Messages : 89
    Par défaut
    Au bout de 10 minutes environs les points se stabilisent, je met donc le sujet à résolutNom : stabilisation_gps.png
Affichages : 346
Taille : 59,6 Ko

    Existe t'il un moyen de changer le mode d'affichage des valeurs?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. wxPython + MatPlotLib + py2exe
    Par bibile dans le forum Py2exe
    Réponses: 1
    Dernier message: 05/08/2005, 22h49
  2. Probleme python 2.4 et matplotlib : unicode encode error
    Par patfrat dans le forum Calcul scientifique
    Réponses: 1
    Dernier message: 12/06/2005, 00h30
  3. Checksum trames GPS
    Par giloutho dans le forum Langage
    Réponses: 3
    Dernier message: 14/02/2005, 12h31
  4. [Protocole] acquisition de données GPS
    Par helonear dans le forum Entrée/Sortie
    Réponses: 8
    Dernier message: 19/11/2004, 23h52
  5. GPS via le port série
    Par nicoche dans le forum C++Builder
    Réponses: 5
    Dernier message: 15/11/2004, 15h30

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