Géolocalisation a posteriori de photographies
Note : Cet article s’inspire copieusement d’un autre, rédigé en 2014 par Christophe Triquet, qui n’est malheureusement plus en ligne. Son article expliquait comment exploiter les photographies dans JOSM ; le mien est moins ambitieux et ne traite que de la géolocalisation des photographies.
Peu d’appareils photographiques, hormis ceux intégrés aux smartphones, disposent d’un récepteur GPS permettant de géolocaliser les photographies. Même lorsqu’un appareil en est équipé, il n’est pas toujours activé car le récepteur GPS fonctionne alors en continu et épuise rapidement la batterie de l’appareil photographique.
Mais si on dispose d’un terminal GPS autonome, il est possible de géolocaliser a posteriori des photographies à partir de la trace GPS enregistrée par ce récepteur lors de la prise de vue, grâce aux outils exiftool et gpscorrelate.
Ces outils lisent l’heure de prise de vue dans les métadonnées EXIF de la photographie, calculent la position géographique de l’appareil photographique au moment de la prise de vue par interpolation des positions enregistrées dans la trace GPS, puis ajoutent cette position aux métadonnées EXIF de la photographie.
Synchronisation horaire des photographies
Pour que la corrélation soit correcte, l’heure enregistrée dans les métadonnées EXIF de la photographie doit être exacte. Or, l’horloge interne des appareils électroniques dérivant, il est rare que ce soit le cas. La première opération à réaliser est donc de corriger l’heure des photographies pour assurer la synchronisation horaire entre les photographies et la trace GPS.
Mais comment déterminer a posteriori et avec exactitude la dérive horaire de l’appareil photographique au moment de la prise de vue ? Tout simplement en photographiant à un moment quelconque de l’excursion l’écran du terminal GPS montrant l’heure du système GPS. En comparant l’heure affichée par le terminal GPS sur la photographie et l’heure enregistrée dans les métadonnées EXIF de cette photographie, nous sommes en mesure de déterminer la dérive de l’horloge et donc la correction horaire à appliquer (nous considérerons cette dérive constante sur toute la durée de la prise de vue). Bien évidemment, si votre GPS affiche l’heure UTC, il faudra en tenir compte dans le calcul, l’heure enregistrée dans les métadonnées EXIF de la photographie étant certainement l’heure locale.
Sur la photographie ci-dessous, l’écran du GPS annonce l’heure locale 18:22:52 :
Mais l’information temporelle enregistrée dans les métadonnées de la photographie diffère :
1exiftool -time:all -s -G ecran_gps.jpg | grep EXIFSortie de la commande :
[EXIF] ModifyDate : 2021:07:19 18:23:55
[EXIF] DateTimeOriginal : 2021:07:19 18:23:55
[EXIF] CreateDate : 2021:07:19 18:23:55
Au moment de la prise de vue, l’horloge interne de l’appareil photographique avait donc 1 minute et 3 secondes d’avance sur l’heure locale officielle.
Nous devons corriger ces informations horaires en retranchant 1 minute et 3 secondes à l’heure enregistrée :
Correction des métadonnées d’horodatage :
1exiftool -alldates-=0:1:3 ecran_gps.jpgL’horodatage de la photographie est bien modifié :
1exiftool -time:all -s -G ecran_gps.jpg | grep EXIFSortie de la commande :
[EXIF] ModifyDate : 2021:07:19 18:22:52
[EXIF] DateTimeOriginal : 2021:07:19 18:22:52
[EXIF] CreateDate : 2021:07:19 18:22:52
Bien évidemment, cette correction horaire est à appliquer à toutes les photographies, la commande exécutée sera donc en réalité :
1exiftool -alldates-=0:1:3 *.jpgCalcul et injection des coordonnées géographiques
Les informations horaires étant synchronisées, nous pouvons désormais demander
à exiftool ou gpscorrelate de calculer et d’injecter dans les métadonnées
EXIF les coordonnées géographiques de la prise de vue en s’appuyant sur la
trace GPS (fournie au format GPX) et sur les informations horaires. Bien
évidemment, la fenêtre temporelle de cette trace GPS doit englober celle des
prises de vue pour que toutes les photographies puissent être géolocalisées.
Initialement, aucune métadonnée EXIF ne fait référence aux coordonnées GPS comme le montre la commande ci-dessous, qui ne renvoie rien :
1exiftool -s -G photo_001.jpg | grep -i gpsOn fait traiter les photographies à exiftool :
1exiftool -geotag trace.gpx *.jpgLes coordonnées GPS sont désormais enregistrées dans les métadonnées EXIF :
1exiftool -s -G photo_001.jpg | grep -i gpsSortie de la commande :
[EXIF] GPSVersionID : 2.2.0.0
[EXIF] GPSLatitudeRef : North
[EXIF] GPSLongitudeRef : East
[EXIF] GPSAltitudeRef : Above Sea Level
[EXIF] GPSTimeStamp : 12:32:23
[EXIF] GPSDateStamp : 2021:07:18
[Composite] GPSAltitude : 460.6 m Above Sea Level
[Composite] GPSDateTime : 2021:07:18 12:32:23Z
[Composite] GPSLatitude : 43 deg 40' 7.47" N
[Composite] GPSLongitude : 12 deg 40' 43.84" E
[Composite] GPSPosition : 43 deg 40' 7.47" N, 12 deg 40' 43.84" E
L’outil gpscorrelate fonctionne de manière similaire, mais il faut lui
indiquer l’écart horaire entre l’heure UTC (à laquelle correspond l’horodatage
GPS) et l’heure locale. Dans l’exemple ci-dessous, il faut ajouter 2 heures
à l’heure UTC pour obtenir l’heure locale :
1gpscorrelate -g trace.gpx -z +02:00 *.jpgSortie de la commande :
Reading GPS Data...
Legend: . = Ok, / = Interpolated, < = Rounded, - = No match, ^ = Too far
w = Write Fail, ? = No EXIF date, ! = GPS already present
Correlate: ////////////////////////
Completed correlation process.
Matched: 24 (0 Exact, 24 Interpolated, 0 Rounded).
Failed: 0 (0 Not matched, 0 Write failure, 0 Too Far,
0 No Date, 0 GPS Already Present.)
Note : Il est possible de traiter les photographies sans procéder à leur
synchronisation horaire préalable, en indiquant à exiftool (via l’option
-geosync) ou à gpscorrelate (via l’option --photooffset) la correction
temporelle à appliquer aux heures enregistrées dans les métadonnées des
photographies. En agissant ainsi, les photographies sont correctement
géolocalisées, mais aucune correction horaire des métadonnées existantes n’est
effectuée :
1exiftool -geotag trace.gpx -geosync=-1:3 *.jpg
2exiftool -time:all -s -G photo_001.jpg | grep EXIFRetour de la seconde commande :
[EXIF] ModifyDate : 2021:07:18 14:32:24
[EXIF] DateTimeOriginal : 2021:07:18 14:32:24
[EXIF] CreateDate : 2021:07:18 14:32:24
[EXIF] GPSTimeStamp : 12:32:23
[EXIF] GPSDateStamp : 2021:07:18
Les coordonnées GPS sont désormais enregistrées dans les métadonnées EXIF :
1exiftool -s -G photo_001.jpg | grep -i gpsRetour de la commande :
[EXIF] GPSVersionID : 2.2.0.0
[EXIF] GPSLatitudeRef : North
[EXIF] GPSLongitudeRef : East
[EXIF] GPSAltitudeRef : Above Sea Level
[EXIF] GPSTimeStamp : 12:32:23
[EXIF] GPSMapDatum : WGS-84
[EXIF] GPSDateStamp : 2021:07:18
[Composite] GPSAltitude : 460.6 m Above Sea Level
[Composite] GPSDateTime : 2021:07:18 12:32:23Z
[Composite] GPSLatitude : 43 deg 40' 7.47" N
[Composite] GPSLongitude : 12 deg 40' 43.84" E
[Composite] GPSPosition : 43 deg 40' 7.47" N, 12 deg 40' 43.84" E
Mais je trouve personnellement plus pertinent de profiter de cette manipulation pour corriger de manière pérenne l’horodatage des photographies.
Vérification visuelle de la géolocalisation
Lorsque je géolocalise des photographies, c’est en général dans le but de contribuer à OpenStreetMap (une photographie remplace avantageusement une prise de notes dans bien des cas). Du coup, je vérifie leur géolocalisation dans JOSM :