100 lines
3.6 KiB
Python
100 lines
3.6 KiB
Python
''' 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()
|