diff --git a/codes/carteLelbc32.py b/codes/carteLelbc32.py new file mode 100644 index 0000000..72ffe1d --- /dev/null +++ b/codes/carteLelbc32.py @@ -0,0 +1,130 @@ +''' Programme de placement de tags images sur un fond OpenStreetMap + On place des images géotaguées dans un répertoire + Le programme en extrait les coordonnées GPS et la date + Il crée des tags avec comme titre le nom des fichiers et la date + et les place sur le fond de carte aux coordonnées GPS +''' + +#importation des module +import os +import folium +import exifread + +def lalatitude(ref,GPSLatitude): + ''' + Convertit les coordonnées GPS EXIF en degrés à virgule flottante + :param ref, GPSLongitude: + :type ref: string, GPSLongitude: exifread.utils.Ratio + :rtype: float + ''' + + d = GPSLatitude.values[0].num + m = GPSLatitude.values[1].num + s = GPSLatitude.values[2].num + + if ref == 'N': + latitude = d + (m / 60.) + (s / 3600.) + elif ref == 'S': + latitude = -1*(d + (m / 60.0) + (s / 3600.0)) + else: + print('La latitude est fausse !') + return latitude + +def lalongitude(ref,GPSLongitude): + ''' + Convertit les coordonnées GPS EXIF en degrés à virgule flottante + :param ref, GPSLongitude: + :type ref: string, GPSLongitude: exifread.utils.Ratio + :rtype: float + ''' + + d = GPSLongitude.values[0].num + m = GPSLongitude.values[1].num + s = GPSLongitude.values[2].num + + if ref == 'W': + longitude = -1*(d + (m / 60.0) + (s / 3600.0)) + elif ref == 'E': + longitude = d + (m / 60.0) + (s / 3600.0) + else: + print('La longitude est fausse !') + return longitude + +# Récupération du facteur de zoom +print('Facteur de zoom (nombre entier) :\n\ + 9 : grande zone\n\ + 11 : zone\n\ + 13 : village ou ville\n\ + 16 : petite route') +facteurZoom = input('Veuillez entrer le facteur de zoom : ') +print('Facteur de zoom : {}'.format(facteurZoom)) + +# Ouverture de l'image en mode de lecture binaire +path = './images/' +fichiers=os.listdir(path) +i = 0 #indice des images +for nom in fichiers: + print("{} : {}".format(i,nom)) + + adresseImage = "./images/"+nom + titre = nom.split('.')[0] + f = open(adresseImage, 'rb') + + # Récupération des tags EXIF + tags = exifread.process_file(f, details=False) + + for tag in tags.keys(): + if tag in ('GPS GPSLatitudeRef', + 'GPS GPSLatitude', + 'GPS GPSLongitudeRef', + 'GPS GPSLongitude', + 'Image ImageDateTime'): + latitude = lalatitude(tags['GPS GPSLatitudeRef'].values, + tags['GPS GPSLatitude']) + longitude = lalongitude(tags['GPS GPSLongitudeRef'].values, + tags['GPS GPSLongitude']) + date = tags['EXIF DateTimeOriginal'] + + try: + print("Latitude : {}, longitude : {}, date : {}".format(latitude, + longitude, date)) + except NameError: + print('Fichier sans données GPS : ',nom) + else: + #création de l'objet Python carte, centrée sur les coordonnées + #latitude et longitude de la première image + + if i == 0: + carte = folium.Map(location=[latitude, longitude],zoom_start=facteurZoom) + + #création d'un marqueur + folium.Marker([latitude, longitude], + popup="