10

Sciences du Numérique et Technologiefe.fil.univ-lille1.fr › sntcarto › media › ROB_normeNMEA_SNT.pdfOn distingue 2DFix (latitude et longitude) et 3DFix (idem +altitude). 2 )On

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Sciences du Numérique et Technologiefe.fil.univ-lille1.fr › sntcarto › media › ROB_normeNMEA_SNT.pdfOn distingue 2DFix (latitude et longitude) et 3DFix (idem +altitude). 2 )On

Classe de SecondeAnnée 2019-2020

Sciences du Numérique et Technologie

Quelques Éléments sur la norme NMEA

La norme NMEA 183 est une norme dé�nissant un protocole de communication entre équipementsmarins, dont font partis les équipements GPS. Elle est dé�nie et controlée par la National MarineElectronics Association, association de fabricants d'appareils électroniques maritimes basée aux USA.On retrouve un peu le phénomène qui a présidé à l'invention de l'ASCII : nécessité de normalisationpour que des équipements de di�érents constructeurs puissent communiquer entre eux.

Pour plus de précisions, on renvoie à :https://gpsd.gitlab.io/gpsd/NMEA.html

https://www.u-blox.com/sites/default/files/the_gps_dictionary.pdf

1 Construction générale d'une trame NMEA

Sous cette norme, les données sont envoyées en utilisant les caractères ASCII imprimables ainsi que leretour chariot <CR> et le retour à la ligne <LF>.

Un jeu de données est transmis sur une ligne (appelée trame) de 82 caractères ASCII maximum.

1) Elle commence par le caractère spécial $

2) Puis, elle comporte un groupe de 5 lettres :� les deux premières lettres désignent le système émetteur. Par exemple,� BD OU GB : Beidou, système de positionnement par satellites chinois� EC : ECDIS, système de visualisation de cartes pour la navigation maritime� GA : Galileo, système de positionnement par satellites de l'UE� GL : GLONASS, système de positionnement par satellites russe� GP : GPS NAVSTAR, système de positionnement par satellites US� QZ : NAVSTAR augmenté pour le Japon

� les trois lettres suivantes désignent le type de trame, c'est à dire le type de données calculéesà partir des indications du système émetteur. Par exemple,� GGA : Fix Data : Heure, position et données associées pour un récepteur� GSA : Dilution Of Precision and Active satellites : liste des satellites et coe�cient d'a�aiblis-sement de la précision due à leur positions.

� GSV : Satellites In View : satellites en vues� RMC : Recommended Minimum Navigation Information : Informations minimales recomman-dées pour la navigation

3) Puis elle comporte des données propres à la trame, les données étant séparées par des virgules.On peut avoir entre autres :� Le temps donné GMT sous le format hhmmss.ss� Les latitudes ou longitudes données au format yyyyy.yy qui mélange unités sexagésimales etdécimales :� Les deux digits à gauche du point représentent les minutes entières.� Les digits à droite du point représentent les décimales de minutes.

Page 2: Sciences du Numérique et Technologiefe.fil.univ-lille1.fr › sntcarto › media › ROB_normeNMEA_SNT.pdfOn distingue 2DFix (latitude et longitude) et 3DFix (idem +altitude). 2 )On

2 Quelques Éléments sur la norme NMEA

� Les digits à gauche des minutes représentent les degrés.Par exemple,3213.80 représente 32 degrés et 13.80 minutes. Et 0.80 minutes représente 0.80 × 60 = 48secondes.On a donc 3213.80↔ 32o13′48′′

4) Après les données, on a un caractère * suivi par un terme de contrôle (checksum) qui s'écrit surdeux caractères.En cas d'incohérence entre le checksum et le reste de la trame, on a repéré une erreur de trans-mission/réception. Pour plus de détails, voir la section Calcul du checksum.

5) Après le checksum, la trame se termine par un retour à la ligne/retour chariot <CR><LF>

2 Détails de quelques types de trames

2.1 Eléments de vocabulaire

1) On appelle GPSFix les informations de localisation fournies par un système GPS pour un pointdonné. On distingue 2DFix (latitude et longitude) et 3DFix (idem +altitude).

2) On appelle DOP (Dilution of Precision, a�aiblissement de la précision) un indicateur des incerti-tudes de calcul dues à la géométrie/aux positions des satellites par rapport au point au sol.La valeur idéale pour le DOP est 1 et plus il est élevé, moins la mesure est �able : excellent si< 2, bon entre 2 et 5, etc...Il se décompose en HDOP (horizontale), VDOP (verticale) et TDOP (temporelle) suivant la formule

DOP =√HDOP 2 + V DOP 2 + TDOP 2

avec de plus PDOP =√HDOP 2 + V DOP 2

2.2 Trame GGA

C'est une trame classique qui contient les données de localisation :

$−−GGA, hhmmss.ss︸ ︷︷ ︸(1)

, llll.ll︸ ︷︷ ︸(2)

, a︸︷︷︸(3)

, yyyyy.yy︸ ︷︷ ︸(4)

, a︸︷︷︸(5)

, x︸︷︷︸(6)

, xx︸︷︷︸(7)

, x.x︸︷︷︸(8)

, x.x︸︷︷︸(9)

, M︸︷︷︸(10)

, x.x︸︷︷︸(11)

, M︸︷︷︸(12)

, x.x︸︷︷︸(13)

, xxxx︸ ︷︷ ︸(14)

∗ hh︸︷︷︸(15)

(1) heure(2) latitude(3) N(orth) ou S(outh)(4) longitude(5) E(ast) ou W(est)(6) Indicateur du type de positionnement : no �x, DGPS, estimated,...(7) Nombre de satellites(8) HDOP (ramenée à une grandeur en m)(9) Altitude du récepteur par rapport au niveau moyen de la mer (modèle géoïde)(10) Unité pour le (9) : m(11) terme correctif pour le (9) suivant la modélisation de la forme de la terre (géoïde vs ellipsoïde).

Ce terme est < 0 si la géoïde est en dessous de l'ellipsoïde.(12) Unité pour le (11) : m(13) Temps en s depuis le dernier étalonnage par rapport à une station au sol(14) ID de la station ayant servi à l'étalonnage.(15) Checksum

Par exemple,

$GPGGA,135845.00,5018.299838,N,00246.160323,E,1,11,0.3,76.1,M,47.2,M�*5Aest une trame de type GGA, basée sur des informations émises par des satellites GPS NAVSTAR.

Page 3: Sciences du Numérique et Technologiefe.fil.univ-lille1.fr › sntcarto › media › ROB_normeNMEA_SNT.pdfOn distingue 2DFix (latitude et longitude) et 3DFix (idem +altitude). 2 )On

Quelques Éléments sur la norme NMEA 3

$GPGGA, 135845.00︸ ︷︷ ︸(1)

, 5018.299838︸ ︷︷ ︸(2)

, N︸︷︷︸(3)

, 00246.160323︸ ︷︷ ︸(4)

, E︸︷︷︸(5)

, 1︸︷︷︸(6)

, 13︸︷︷︸(7)

, 0.3︸︷︷︸(8)

, 76.1︸︷︷︸(9)

, M︸︷︷︸(10)

, 47.2︸︷︷︸(11)

, M︸︷︷︸(12)

, ︸︷︷︸(13)

, ︸︷︷︸(14)

∗ hh︸︷︷︸(15)

(1) heure : 13h58min45s(2)(3) latitude : 5018.299838 N qui correspond à 50o18′17.99′′N(4)(5) longitude : 00246.160323 E qui correspond à 2o46′9.61′′E(6) Indicateur du type de positionnement : 1 (GPS Fix)(7) Nombre de satellites : 11(8) HDOP : 0.3m(9)(10) Altitude de l'antenne/niveau de la mer : 76.1m(13) Temps en s depuis le dernier étalonnage par rapport à une station au sol : DGPS non utilisé(14) ID de la station ayant servi à l'étalonnage : aucune(15) Checksum

2.3 Trame GSV

C'est une trame classique qui donne des informations sur les positions des satellites suiveurs. Les tramesGSV peuvent être émises par groupe pour avoir la place pour lister les positions de tous les satellites(quatre maxi par trame).

$−−GSV, x︸︷︷︸(1)

, x︸︷︷︸(2)

, x︸︷︷︸(3)

, , x︸︷︷︸(4)

, x︸︷︷︸(5)

, x︸︷︷︸(6)

, x︸︷︷︸(7)

,. . . ∗ hh︸︷︷︸(n)

(1) nombre total de trames dans le groupe(2) numéro de la trame dans le groupe(3) nombre total de satellites en vue(4) identi�ant du premier satellite(5) élévation (de −90 à 90) en degrés du 1er satellite(6) azimuth par rapport au Nord (de 000 à 359) en degrés du 1er satellite(7) SNR (Signal to Noise Ratio en dB) : indication de la qualité du signal radio émis(8)->(11) éventuellement : répétition de la séquence (4)->(7) pour le 2ème satellite(12)->(15) éventuellement : répétition de la séquence (4)->(7) pour le 3ème satellite(16)->(19) éventuellement : répétition de la séquence (4)->(7) pour le 4ème satellite(n) Checksum

Par exemple,

$GLGSV,2,1,06,69,71,193,32,86,04,334�79,85,330,26,70,39,319,31*6E$GLGSV,2,2,06,80,32,234,25,87,14,029,18*60

est un groupe de deux trames de type GSV, basée sur des informations émises par des satellites GLO-NASS.$GLGSV, 2︸︷︷︸

(1)

, 1︸︷︷︸(2)

, 06︸︷︷︸(3)

, , 69, 71, 193, 32︸ ︷︷ ︸(4)−>(7)

, 86, 04, 334,︸ ︷︷ ︸(8)−>(11)

, 79, 85, 330, 26︸ ︷︷ ︸(12)−>(15)

, 70, 39, 319, 31︸ ︷︷ ︸(16)−>(19)

∗ 6E︸︷︷︸(20)

$GLGSV, 2︸︷︷︸(1′)

, 2︸︷︷︸(2′)

, 06︸︷︷︸(3′)

, , 80, 32, 234, 25︸ ︷︷ ︸(4′)−>(7′)

, 25, 87, 14, 029︸ ︷︷ ︸(8′)−>(11′)

∗ 60︸︷︷︸(12′)

(1),(1') il y a 2 trames dans le groupe(2) 1ere trame(2') 2eme trame(3), (3') 6 satellites en vue

Page 4: Sciences du Numérique et Technologiefe.fil.univ-lille1.fr › sntcarto › media › ROB_normeNMEA_SNT.pdfOn distingue 2DFix (latitude et longitude) et 3DFix (idem +altitude). 2 )On

4 Quelques Éléments sur la norme NMEA

ref. Id du satellite élévation (o) azimuth N (o) SNR de la trans-mission (dB)

(4)->(7) 69 71 193 32

(8)->(11) 86 04 334

(12)->(15) 79 85 330 26

(16)->(19) 70 39 319 31

(4')->(7') 80 32 234 25

(8')->(11') 25 87 14 029

2.4 Trame GSA

C'est une trame classique qui donne des informations sur les satellites suiveurs et les imprécisions decalcul de positions.

$−−GSA, a︸︷︷︸(1)

, a︸︷︷︸(2)

, x, x, x, x, x, x, x, x, x, x, x, x︸ ︷︷ ︸(3)−−>(14)

, x.x︸︷︷︸(15)

, x.x︸︷︷︸(16)

, x.x︸︷︷︸(17)

∗ hh︸︷︷︸(18)

(1) M/A : sélection manuelle ou automatique du mode(2) Mode : 1 : no Fix // 2 : positionnement 2D // 3 : positionnement 3D(3)�>(14) Identi�ant des satellites utilisés pour le positionnement(15) PDOP(16) HDOP(17) VDOP(18) Checksum

Par exemple,

$GPGSA,A,3,05,13,15,17,20,24,28,30� � ,1.5,0.9,1.1*37est une trame de type GSA, basée sur des informations émises par des satellites GPS NAVSTAR.

$GPGSA, A︸︷︷︸(1)

, 3︸︷︷︸(2)

, 05︸︷︷︸(3)

, 13︸︷︷︸(4)

, 15︸︷︷︸(5)

, 17︸︷︷︸(6)

, 20︸︷︷︸(7)

, 24︸︷︷︸(8)

, 28︸︷︷︸(9)

, 30︸︷︷︸(10)

, , , , , 1.5︸︷︷︸(15)

, 0.9︸︷︷︸(16)

, 1.1︸︷︷︸(17)

∗ 37︸︷︷︸(18)

(1) A : automatique(2) positionnement 3D(3)�>(10) suivi réalisés par 8 satellites de NAVSTAR, d'identi�ants 05,13,15,17,20,24,28,30(15) PDOP : 1.5 Bonne valeur !(16) HDOP : 0.9(17) VDOP : 1.1(18) Checksum

2.5 Calcul du checksum

Il est donné à titre de curiosité mais il nécessite la connaissance du codage ASCII et du calcul enbinaire/hecadécimal.

On rappelle que l'opérateur booléen XOR, également noté ⊕, correspond au OU exclusif et a pourtable

⊕ 0 1

0 0 1

1 1 0

Il est commutatif et associatif : si a, b, c représentent des variables booléennes, a ⊕ b = b ⊕ a et(a⊕ b)⊕ c = a⊕ (b⊕ c).Ainsi, si on veut calculer le XOR de toute une famille de variables booléennes, peu importe l'ordredans lequel on combinera les éléments du moment que chaque élément de la liste est pris une seule fois.

Page 5: Sciences du Numérique et Technologiefe.fil.univ-lille1.fr › sntcarto › media › ROB_normeNMEA_SNT.pdfOn distingue 2DFix (latitude et longitude) et 3DFix (idem +altitude). 2 )On

Quelques Éléments sur la norme NMEA 5

Le checksum représente en fait un octet écrit en hexadécimal. Pour le calculer, on convertit en binaireASCII tous les caractères de la trame compris strictement entre les délimiteurs $ et * et on calcule leXOR sur 8 bits de ces termes.Par exemple, la chaîne de trois caractères 'N,9' est traitée comme suit :� On convertit chaque caractère en binaire ASCII :'N' ↔ 01001110 ',' ↔ 00101100 '9'↔ 00111001

� On applique l'opérateur bit à bit sur chaque octet.

On calcule d'abord 'N'⊕','0 1 0 0 1 1 1 0

⊕ 0 0 1 0 1 1 0 0

= 0 1 1 0 0 0 1 0

Puis ('N'⊕',')⊕'9'0 1 1 0 0 0 1 0

⊕ 0 0 1 1 1 0 0 1

= 0 1 0 1 1 0 1 1

Donc ('N'⊕',')⊕'9'↔ 01011011

� On traduit cet octet en deux caractères hexadecimaux : 01011011↔0101 1011↔5 B

grace à la table usuelle :

.

décimal 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

hexa. 0 1 2 3 4 5 6 7 8 9 A B C D E F

binaire 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111

3 Obtention d'une trame NMEA

Tout smartphone avec une puce GPS peut être muni d'une application permettant d'obtenir des tramesNMEA. Ici, on utilisera l'application gratuite NMEA Tools.

Menu de démarrage :- NMEA Enregistreur

- NMEA Parser

- NMEA Viewer

En cliquant sur NMEA enregistreur, la deuxième fenêtre apparait.On peut choisir les données qui seront a�chées dans les cases puis on cliquesur Enregistrement.L'enregistrement commence.Dès que la puce GPS capte un signal su�sant, la carte se repositionne, lesvaleurs des champs se modi�ent, le nombre de trames est a�ché en bas.Quand on le souhaite, on réappuie sur le bouton Enregistrement.Un autre menu apparait et en re-cliquant sur Enregistrer, on accède alors àune arborescence pour choisir un répertoire et un champ de saisie pour rentrerle nom du �chier (format txt).

Page 6: Sciences du Numérique et Technologiefe.fil.univ-lille1.fr › sntcarto › media › ROB_normeNMEA_SNT.pdfOn distingue 2DFix (latitude et longitude) et 3DFix (idem +altitude). 2 )On

6 Quelques Éléments sur la norme NMEA

A noter que� NMEA Parser permet de visualiser (avec la même interface) un trajet correspondant à un �chier detrames, en pouvant choisir la vitesse à laquelle les trames sont lues, mettre sur pause pour observerl'interprétation d'une trame particulière, etc...

� NMEA Viewer permet de lire un �chier de trames, avec une coloration di�érente pour chaque type detrame, etc...

4 Utilisation de Python

4.1 Parser un �chier contenant des données NMEA

Les �chiers de sortie de l'application NMEA tools sont des �chiers .txt contenant une trame par ligne,et donc ils se traitent de manière très classique en Python.

Ici, le �chier de sortie de NMEA Tools s'appelle fichierNMEA.txt et a été placé dans le même répertoireque le script Python.

1 def collecteGGA ():

2 # renvoie un tableau trajet contenant (sous forme de

tableau de str) toutes les trames de type GGA du

fichierNMEA.txt

3 fichier=open('fichierNMEA.txt','r')

4 trame=fichier.readline ()

5 trajet =[]

6 while trame !="" :

7 Ttrame=trame.split(',')

8 if Ttrame [0]=='$GPGGA ':

9 trajet.append(Ttrame)

10 trame=fichier.readline ()

11 fichier.close()

12 return(trajet)

� fichier=open('fichierNMEA.txt','r') : fichier est un objet permettant un accès en lecture à'fichierNMEA.txt'.Attention, fichier n'est pas une chaine de caractères ! Il est de type _io.TextIOWrapper

� La méthode .readline() renvoie sous forme de str la ligne courante de l'objet _io.TextIOWrapperauquel elle est appliquée.A la ligne 4, fichier.readline() contient la première ligne de fichier, au second appel, il contientla seconde ligne de fichier,... Quand on atteint la �n de �chier, fichier.readline() contient lachaine vide.

� Ttrame=trame.split(',') : Ttrame est un tableau de str, contenant les mêmes caractères quetrame, à part les ',' qui marquent les séparations.

Par exemple, avec

1 essai='a,b,,d,e,f,,,i'

2 Tessai=essai.split(',')

on a Tessai=['a', 'b', �, 'd', 'e', 'f', �, �, 'i']

� Avec trame une trame GGA, on a par exemple,

trame='$GPGGA,135830.00,5017.430541,N,00232.923257,E,1,13,0.4,73.7,M,47.2,M�*5C'

et Ttrame=['$GPGGA','135830.00','5017.430541','N','00232.923257','W','1','13','0.4'

,'73.7','M','47.2','M',�,'*5C']Et donc,

i 0 1 2 3 4 5

Ttrame[i] type de trame heure latitude 'N' ou 'S' longitude 'E' ou 'W'

Page 7: Sciences du Numérique et Technologiefe.fil.univ-lille1.fr › sntcarto › media › ROB_normeNMEA_SNT.pdfOn distingue 2DFix (latitude et longitude) et 3DFix (idem +altitude). 2 )On

Quelques Éléments sur la norme NMEA 7

4.2 Calcul de coordonnées

Dans cette section, T est un tableau comme Ttrame, qui contient les données d'une trame GGA et donc,T[2], T[3]... ont le même sens que au 4.1.

Le but de la fonction suivante est d'extraire de T les données de positions au format NMEA et de lesconvertir au format utilisé par openStreetMap .On veut donc passer de

Degrés-Minutes-Minutes Décimales avec direction NSEW

àDegré décimal signé

On donne la fonction et on indique son déroulement avecT=['$GPGGA','135830.00','5017.430541','N','00232.923257','W',...]

1 def conversionLatLong(T):

2 latDM=float(T[2])

3 deg=int(latDM /100)

4 min=latDM -100* deg

5 if T[3]=='N':

6 lat=deg+min/60

7 else :

8 lat=-deg -min/60

9 longDM=float(T[4])

10 deg=int(longDM /100)

11 min=longDM -100* deg

12 if T[5]=='E':

13 long=deg+min/60

14 else :

15 long=-deg -min/60

16 return ([lat ,long])

1 #

2 # latDM =5017.430541

3 # deg=50

4 # min =17.430541

5 # T[3] vaut 'N'

6 # donc lat =50.29050902

7 #

8 #

9 # longDM =00232.923257

10 # deg=2

11 # min =32.923257

12 # T[5] vaut 'W'

13 #

14 #

15 # donc long = -2.548720950

16 #

On pourrait vouloir en début de script véri�er la condition T[2]!=�.Ceci peut arriver si la trame est corrompue et dans ce cas, l'instruction ligne 2 provoquera une erreur.

4.3 A�chage sur la carte

4.3.1 Folium

On utilise la bibliothèque folium de Python, qui est spécialement conçue pour l'a�chage de cartes, enparticulier sous Jupyter.On renvoie à https://python-visualization.github.io/folium/quickstart.html comme référenceet on signale le très bel exemple :https://numerique-sciences-informatiques.discip.ac-caen.fr/formation-academique-snt#Localisation-cartographie-et-mobilite

Dans cette section, toutes les coordonnées sont données en degré décimaux et les couples latitude-longitude sont données sous la forme [lat,long].folium propose entre autre :� une fonction map qui crée une carte, dont on indique entre autres possibilités le centre et le facteurde zoom.Les cartes s'a�chent directement sous Jupyter ou peuvent être sauvegardées dans une page HTML.

� des fonctions Marker, Polyline, Polygon, Rectangle, Circle, and CircleMarker qui permettent de créerdes éléments à placer sur les cartes.

� Les tracés sont associés aux cartes au moyen de .add_to(carte) .L'utilisation est standard.

Page 8: Sciences du Numérique et Technologiefe.fil.univ-lille1.fr › sntcarto › media › ROB_normeNMEA_SNT.pdfOn distingue 2DFix (latitude et longitude) et 3DFix (idem +altitude). 2 )On

8 Quelques Éléments sur la norme NMEA

Par exemple,

1 import folium

2

3 carte = folium.Map(location =[50.6096 , 3.1374] , zoom_start =18)

4

5 chemin =[[50.6096 , 3.1374] ,[50.6096 , 3.1373] ,[50.6097 ,

3.1374] ,[50.6098 , 3.13715] ,[50.6101 , 3.1374] ,[50.6102 ,

3.1377] ,[50.6103 , 3.1379]]

6

7 route = folium.PolyLine(chemin ,color='cyan')

8 marqueur=folium.Marker ([50.6096 , 3.1374] , popup='salle de ré

union')

9 marqueurCafet=folium.CircleMarker ([50.6103 , 3.1379] ,10 , color='

green',popup='cafetaria ')

10 cercle = folium.Circle ([50.6089 , 3.1389] ,50 , color='red',fill='

true',opacity =0.1, popup='un cercle !!')

11

12 marqueur.add_to(carte)

13 marqueurCafet.add_to(carte)

14 route.add_to(carte)

15 cercle.add_to(carte)

16 carte.add_child(folium.LatLngPopup ())

17 # cette dernière ligne fait apparaitre un popup contenant [lat

,long] du point cliqué

18 carte.save('maCarte.html')

qui génère la page maCarte.html dans laquelle on trouve :

Page 9: Sciences du Numérique et Technologiefe.fil.univ-lille1.fr › sntcarto › media › ROB_normeNMEA_SNT.pdfOn distingue 2DFix (latitude et longitude) et 3DFix (idem +altitude). 2 )On

Quelques Éléments sur la norme NMEA 9

4.3.2 Application aux trames NMEA

Avec collecteCGA et conversionLatLong dé�nies comme précédemment, on dé�nit la fonction

1 def listeTrajet(trajet):

2 listePoints =[]

3 for k in range(3,len(trajet)):

4 #on s'aperçoit que les premières trames sont corrompues et

provoquent une erreur

5 listePoints.append(conversionLatLong(trajet[k]))

6 return(listePoints)

qui extrait du tableau de trames GGA les données de localisation sous la forme d'un tableau de[lat,long].

Dès lors, on conclut avec

1 trajet=collecteGGA ()

2 listePoints=listeTrajet(trajet)

3 import folium

4 carte = folium.Map(location=listePoints [0], zoom_start =16)

5 route = folium.PolyLine(chemin ,color='red')

6 route.add_to(carte)

7 carte.save('monTrajet.html')

qui génère la page monTrajet.html dans laquelle on trouve :

Page 10: Sciences du Numérique et Technologiefe.fil.univ-lille1.fr › sntcarto › media › ROB_normeNMEA_SNT.pdfOn distingue 2DFix (latitude et longitude) et 3DFix (idem +altitude). 2 )On

10 Quelques Éléments sur la norme NMEA

4.4 Courbe z(t)

On veut représenter l'altitude en fonction du temps de trajet.On donne la fonction recuperationTempsAltitude et on observe son fonctionnement avecT=['$GPGGA','135830.00','5017.430541','N','00232.923257','W','1','13','0.4','73.7','M','...]

1 def recuperationTempsAltitude(T):

2 p=T[1]. index('.')

3 heures=int(T[1][:p-4])

4 minutes=int(T[1][p-4:p-2])

5 secondes=float(T[1][p-2:])

6 Tsec =3600* heures +60* minutes+secondes

7 return ([heures ,minutes ,secondes ,Tsec ,float(T[9])])

1 #

2 # T[1]= '135830.00 ' et p=6

3 # heures=int(T[1][:2])=int('13')=13

4 # minutes=int(T[1][2:4])=int('58')=58

5 # secondes=float(T[1][p-2:])=float ('30.00') =30.0

6 # Tsec =3600* heures +60* minutes+secondes =50310.0

7 # La fonction renvoie [13 ,58 ,30.0 ,50310.0 ,73.7]

Puis on a la fonction suivante qui extrait du tableau de trames GGA les données temps/altitude sous laforme de deux tableaux en correspondance, listeTemps,listeAlt

1 def listeTempsAltitude(trajet):

2 listeTemps =[]

3 listeAlt =[]

4 CInit=recuperationTempsAltitude(trajet [3])

5 Tinit=CInit [3]

6 for k in range(3,len(trajet)):

7 Tk=recuperationTempsAltitude(trajet[k])

8 listeTemps.append(Tk[3]-Tinit)

9 listeAlt.append(Tk[4])

10 return(listeTemps ,listeAlt)

En�n, la fonction suivante réalise le tracé, la commande plt.plot prenant comme argument une listed'abcisses et une liste d'ordonnées et trace les points correspondants en les reliant.

1 import matplotlib.pyplot

as plt

2 def traceTAlt ():

3 trajet=collecteGGA ()

4 TTA=listeTempsAltitude

(trajet)

5 plt.plot(TTA[0],TTA

[1])

6 plt.show()