Coordonnées GPS folium python

Bonjour,
comme je l'avais déjà signalé j'ai des difficultés à convertir des coordonnées obtenues par NMEA sur folium, comment puis-je faire pour avoir les "bonnes coordonnées" ?
Je vous joins mes programmes python qui donnent des cartes avec plusieurs kilomètres d'erreur :-/
import math

def f(x):
    return x*100/60

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
et aussi
import NMEA_CSV as nc
import folium
import csv
import math as m

def fract(x):
    return x-m.trunc(x)

def nom_to_html(mon_fichier):
    l=len(mon_fichier)
    nom=mon_fichier[:l-4]+'_map.html'
    return nom

def mk_crd(x):
    t1=x/100
    temp=t1-m.floor(x/100)
    return t1+temp/100*60

a=43.709419
b=1.469382

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]))
    sortie = nom_to_html(mon_fichier)
    carte=folium.Map(location=[x,y],zoom_start=15)
    k=0
    l=len(Pts_GPS)
    for pt in Pts_GPS:
        k=k+1
        lat=mk_crd(float(pt[1]))
        lon=mk_crd(float(pt[2]))
        if (k%6==0):
            folium.Marker([lat,lon],popup='Ici').add_to(carte)
    lat=mk_crd(float(Pts_GPS[l-1][1]))+0.0283762
    lon=mk_crd(float(Pts_GPS[l-1][2]))+0.018285
    print(f'La dernière donnée est lat={lat} et lon={lon}')
    folium.Marker([a,b],popup='La').add_to(carte)
    carte.save(sortie)

## l'idéal serait de prendre les données en itérable et de marquer les points

def fonction_test(sortie):
    carte=folium.Map(location=[a,b],zoom_start=15)
    carte.save(sortie)

##points=extraction_csv('Nmea2.txt')
##Pts_GPS=convert_GPS(points)
####
######
##c=folium.Map(location=points[0],zoom_start=15)
######
##for lat,lon,nom in points:
##    lat=float(lat)
##    lon=float(lon)
##    folium.Marker([lat,lon], popup=nom).add_to(c)
####
##c.save('maCarte1.html')
##
fichier_to_map('Nmea90.txt')
Voilà... je ne peux pas vous joindre mon fichier Nmea90.txt, si quelqu'un teste mon programme avec "son" fichier Nmea ?
à bientôt et merci d'avance,
F.D.

Réponses

  • Je ne saurais dire si c'est l'origine du problème, mais en général avec Python, j'évite de mélanger des entiers et des réels; comme tu travailles avec des flottants, je mettrais un point aux différents paramètres (100. 60. etc.) pour éviter que ce soit Python qui fasse les conversions Int $\rightarrow$ float

    Peut-on imaginer que les erreurs viennent du manque de précision, d'arrondis à la lecture, etc (voir par exemple latitude, longitude et "0.0283762" ou "0.018285; idem pour a, b); une idée jetée comme ça.

    Sans le fichier Nmea, difficile d'aller plus avant

    Paul
Connectez-vous ou Inscrivez-vous pour répondre.