Coordonnées GPS nmea, python (module folium)
Bonjour,
je suis en galère pour convertir des données issues du logiciel NMEA en coordonnées exploitables par folium (jolie librairie python).
J'extraie les données avec amour et circonspection, je dois ensuite les convertir.
exemple:
Bon, je récupère alors mes données via un format csv et je ne garde qu'un nom de point (point i) et deux valeurs.
Dans la ligne 1 du fichier ci-dessus: 4338.1713 (N) et 00128.3600 (E).
Ok. Pas besoin de travailler des heures pour diviser par 100.
Problème: voilà les "vraies" coordonnées GPS du lieu susvisé
a=43.615439
b=1.476860
Je ne sais pas comment m'en sortir ? Je n'ai trouvé aucune formule/doc expliquant cette grosse différence dans les valeurs (grosse, la carte se retrouve entre 1 et 200km du lieu visé).
Voici mon code.
Merci d'avance de vos éclaircissements.
Bien amicalement,
F.D.
je suis en galère pour convertir des données issues du logiciel NMEA en coordonnées exploitables par folium (jolie librairie python).
J'extraie les données avec amour et circonspection, je dois ensuite les convertir.
exemple:
$GNGGA,075654.989,4338.1713,N,00128.3600,E,0,0,,133.6,M,50.4,M,,*50 $GPGSA,A,1,,,,,,,,,,,,,99.99,99.99,99.99*30 $GLGSA,A,1,,,,,,,,,,,,,99.99,99.99,99.99*2C $GPGSV,3,1,11,24,79,040,,12,66,242,,19,37,066,,15,37,174,*7E $GPGSV,3,2,11,25,26,240,,17,24,045,,10,19,281,,32,13,318,*77 $GPGSV,3,3,11,20,12,253,,13,11,149,,06,01,096,*4A $GLGSV,3,1,10,77,56,030,,78,46,294,,68,45,290,,67,34,215,*60 $GLGSV,3,2,10,87,29,109,,86,25,042,,69,14,335,,76,06,074,*6D $GLGSV,3,3,10,88,06,149,,79,02,268,*6E $GNRMC,075654.989,V,4338.1713,N,00128.3600,E,0.000,0.00,230519,,,N*5Favec une petite recherche wikipédia et beaucoup de bonne volonté, on trouve que les lignes contenant des coordonnées GPS ont des têtes spéciales (ex: $GNGGA ****).
Bon, je récupère alors mes données via un format csv et je ne garde qu'un nom de point (point i) et deux valeurs.
Dans la ligne 1 du fichier ci-dessus: 4338.1713 (N) et 00128.3600 (E).
Ok. Pas besoin de travailler des heures pour diviser par 100.
Problème: voilà les "vraies" coordonnées GPS du lieu susvisé
a=43.615439
b=1.476860
Je ne sais pas comment m'en sortir ? Je n'ai trouvé aucune formule/doc expliquant cette grosse différence dans les valeurs (grosse, la carte se retrouve entre 1 et 200km du lieu visé).
Voici mon code.
def extraction_csv(fichiercsv): liste=[] with open(fichiercsv,'r') as fcscv: lecteur = csv.reader(fcscv, delimiter=',') for ligne in lecteur: if '$GNGGA' in ligne: ##print(f'La ligne est {ligne}') liste.append(ligne) return liste def convert_GPS(L): L_GPS=[] i=0 for donnees in L: point1=f'Point {i}', f'{donnees[2]}', f'{donnees[4]}' L_GPS.append(point1) i=i+1 return L_GPS def mk_crd(x): t1=x/100 temp=x/100-m.floor(x/100) temp=temp*0.95 return t1+temp a=43.615439 b=1.476860 def fichier_to_map(mon_fichier): points=nc.extraction_csv(mon_fichier) Pts_GPS=nc.convert_GPS(points) x=mk_crd(float(Pts_GPS[0][1])) y=mk_crd(float(Pts_GPS[0][2])) carte=folium.Map(location=[x,y],zoom_start=15) carte.save(sortie)Le 0.95 dans mk_crd était une tentative empirique pour rectifier les coordonnées lues.
Merci d'avance de vos éclaircissements.
Bien amicalement,
F.D.
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
il me semble comprendre qu'il y a un traitement à faire pour retrouver les "bonnes" coordonnées. Intuitivement je me dis qu'un coefficient multiplicateur a été appliqué pour éviter les erreurs d'arrondi, et que cette information est contenue dans une ligne avant ou après celle que tu exploites (mais c'est juste une impression)
merci pour cette réponse, je vais continuer de chercher dans cette direction
Amicalement,
F.D.