''' 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, GPSLatitude: :type ref: string, GPSLongitude: exifread.utils.Ratio :rtype: float num signifie numérateur et den dénominateur, car les données sont sous forme de fractions ''' d = GPSLatitude.values[0].num/GPSLatitude.values[0].den m = GPSLatitude.values[1].num/GPSLatitude.values[1].den s = GPSLatitude.values[2].num/GPSLatitude.values[2].den # print("Degrés : ",d," Minutes : ",m," Secondes : ",s) 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 num signifie numérateur et den dénominateur, car les données sont sous forme de fractions ''' d = GPSLongitude.values[0].num/GPSLongitude.values[0].den m = GPSLongitude.values[1].num/GPSLongitude.values[1].den s = GPSLongitude.values[2].num/GPSLongitude.values[2].den # print("Degrés : ",d," Minutes : ",m," Secondes : ",s) 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 #--------------- Programme principal -----------------------# description = "Test" # Ouverture du fichier csv en mode écriture lefichiercsv = open(r"Tags.csv", "w") lefichiercsv.write("name,description,Lat,Lon\n") # 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_reduites/"+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 la ligne du fichier csv # {{url_du_fichier}}, description, latitude, longitude et date #lefichiercsv.write("{{{{{}}}}}, {}, {}, {}, {}\n".format(nom,description, latitude,longitude, date)) lefichiercsv.write("{},{} {{{{http://www.cvgg.org/MontRacine/HautGeneveysSagne/{}}}}},{},{}\n".format(nom,description, nom, latitude,longitude)) #dereferencement des variables pour lever l'exception del latitude, longitude #changement d'image i = i + 1 lefichiercsv.close()