Theme 4 : LOCALISATION, CARTOGRAPHIE ET MOBILITE



Dans cette séance, nous allons :

étudier ce qu'est une trame NMEA (fournie par un GPS)
fabriquer une carte sous Python

retour à l 'index du thème 4

retour a la page principale


DECODAGE D'UNE TRAME NMEA

Rappel


Votre récepteur GPS (Smartphone) reçoit des signaux depuis les satellites des différentes constellations de satellites servant à la géolocalisation :
GPS (États-Unis), Galileo(Union Européenne), Glonass(Russie), Baidou(Chine)).

En traitant des données, il calcule votre position géographique : coordonnées et altitude. Le récepteur envoie ces informations sous forme de phrases électroniques appelées "trames" à différentes applications installées sur votre Smartphone.


Afin que toutes les applications puissent utiliser ces "trames", il est nécessaire que le format de ces phrases suivent des normes fixes.

Vous souvenez-vous? Compléter la définition suivante qui a déjà été vue précédemment dans le thème Internet :

Description de la trame NMEA 0183


Pour les trames issues de récepteurs GPS, les normes du protocole sont définies et contrôlées par la National Marine Electronics Association (NMEA), association américaine de fabricants d'appareils électroniques maritimes. Pour cette raison, on parle de protocole NMEA.

Il y a deux Normes NMEA :

º le NMEA 0183 qui a l’avantage d’être « lisible » mais qui est basée sur une communication série assez lente, peu performante et plus complexe à mettre en réseau.

º une plus récente le NMEA 2000 qui n’est pas directement « lisible », beaucoup plus rapide et simple à installer en réseau.

La seule norme au programme de SNT est celle NMEA 0183 car cette trame est lisible.

Une trame NMEA (sous-entendu NMEA 0183) est donc une suite de caractères contenant des informations de géolocalisation, on parle des champs de la trame NMEA :


Dans l'exemple ci-dessus :
→ repérer le caractère qui sépare les champs de la trame,
→ combien de champs y-a-t-il dans cette trame NMEA?
→ Combien de sattelites ont été utlisés pour cette géolocalisation? Cela confirme-t-il ce qui a été dit à la séance 1?

Avant de travailler sur la trame NMEA, assurons-nous que les étapes de la géolocalisation sont comprises:

Le décodage d'une trame NMEA


Pour récupérer les informations à partir d'une trame NMEA, il est nécessaire de la décoder c'est-à-dire de séparer les champs et de les traduire. Cla se fait à l'aide d'un algorithme.

Automatiser la recherche avec Python

1 - Obtenir la carte à partir des coordonnées de la trame NMEA

Voici ci-dessous un code à saisir (par copie ou par saisie) sur Basthon :

Saisir puis exécuter le script précédent.

Que se passe-t-il au moment de l'exécution ?

Que remarquez-vous quand aux éléments apparaissant dans l'URL ?

Quelle ville est représentée ?
Saisir ensuite le script suivant qui utilise la bibliothèque folium :


Quelle est la différence?

2 - Extraire la latitude et la longitude de la trame NMEA

Voici ci-dessous le script en python d'une fonction latitude qui renvoie la latitude (sans le signe et en degrés décimaux) d'un lieu à partir d'une trame NMEA 0183.

Saisir (par copier - coller) ce code dans Basthon, lire les commentaires indiqués par des # et comprendre le programme, puis répondre aux questions :


→ Ecrire dans la console Python de Basthon une ligne d'appel de la fonction latitude avec la trame NMEA suivante :

$GPGGA,194701.45,2612.3990,S,02802.6016,E,1,06,2.35,1,M,,,,0000∗0E

→Le résultat obtenu est-il cohérent?
→Pour obtenir la fonction longitude qui renvoie la longitude (sans le signe et en degrés décimaux) d'un lieu à partir d'une trame NMEA 0183, il suffit de reprendre le code de la fonction latitude avec quelques modifications : faire ces modifications, puis tester la fonction longitude avec la trame précédente.

3 - Une fonction python pour le signe


la latitude d'un lieu est en fait un nombre avec un signe :

si le lieu est situé dans l'hémisphère nord, alors la latitude est positive,

sinon la latitude est négative.

Dans une trame NMEA 0183, la position par l'équateur est donnée par 1 lettre :

N : si le lieu est situé dans l'hémisphère nord,

S : si le lieu est situé dans l'hémisphère sud.

Voici ci-dessous le script de la fonction signe_latitude. Cette fonction fera appel à la fonction latitude étudiée précédemment pour renvoyer la latitude, avec son signe, du lieu correspond à la trame entrée comme paramètre.

Compléter la ligne : if .......... afin que cette fonction soit opérante.


De même, modifier le code de la question précédente donnant la fonction signe_latitude pour obtenir une fonction signe_longitude qui renvoie la longitude, avec son signe, du lieu correspond à la trame entrée comme paramètre...

4 - Obtenir le script complet


Pour obtenir un script complet qui affiche les coordonnées du lieu en degrés décimaux et permet la visualisation sur OpenStreetMap, il faut rassembler les différentes fonctions précédentes dans un même programme en suivant la structure du code apparaissant ci-dessous :
Tester votre programme avec la trame suivante :

$GPGGA,194701.45,2612.3990,S,02802.6016,E,1,06,2.35,1,M,,,,0000∗0E
Obtenez-vous l'affichage suivant ?