Lorsque l'on prépare son voyage on se demande parfois le temps qu'il faut prévoir pour aller d'un point à un autre et le temps qu'il restera pour les visites. Le but de ce blog est de retracer les itinéraires de mes voyages, pour en garder la mémoire, et pour les partager avec mes lecteurs.

La plupart des photos qui illustrent le blog sont disponibles chez Dreamstime avec différentes licences d'utilisation.

samedi 26 mai 2018

Afficher les lieux et heures de photos dans MyMaps

L'outil MyMaps de Google

Parmi les nombreux outils proposés par Google, MyMaps permet de créer ses propres cartes, en superposant sur une carte Google des calques sur lesquels on peut ajouter des informations:

  • de simples points de repère avec du texte,
  • des lignes tracées à la main,
  • des itinéraires tracés automatiquement par Google entre deux points choisis,
  • des photos ...

Il est aussi possible d'importer des fichiers dont les informations sont interprétées par Google et affichées sur le calque.

Pour utiliser MyMaps, il faut au préalable créer un compte Google

Une fois le compte créé, taper MyMaps dans le moteur de recherche Google mène sur la page de création de cartes.

Il est assez facile pour se familiariser avec l'outil de réaliser les actions suivantes:

  • ajouter des points de repères,
  • changer leur style soit individuellement, soit pour tous les points du calque,
  • changer leur forme, leur couleur, en cliquant sur un point et sur l'icône 'Style',
  • éditer un titre, un commentaire, en cliquant sur un point et sur l'icône 'Modifier'
  • ajouter un calque, lui donner un titre, et y ajouter des points de repères,
  • modifier en bloc le style de tous les points du calque en choisissant "style uniforme",
  • ajouter un itinéraire,
  • etc.
Au moment où j'écris cet article, MyMaps est limitée à 10 calques, et à 2000 points dans un seul fichier kml importé.

Les fichiers KML

Ce sont des fichiers texte interprétés par les logiciels comme Google Maps pour définir des points géographiques. Le langage est assez riche (voir ici) et nous n'en utilisons qu'une petite partie, le but recherché étant simplement de positionner sur une carte tous les endroits où une photo a été prise et d'y noter la date et l'heure.
Pour importer un fichier kml dans une carte MyMaps, il suffit d'ajouter un calque et de cliquer sur Importer. Une fenêtre s'ouvre vers laquelle on peut faire glisser le fichier kml. Une fois le fichier importé, on peut changer le look des repères et afficher les noms des points, qui, avec les kml créés par l'utilitaire ci-dessous, seront seront l'heure de prise de chaque photo.

Création des fichiers kml

Les données nécessaires: date de photo, données GPS sont stockées dans les fichiers de photos sous un format appelé EXIF (Exchangeable image file format). Il faut donc les récupérer pour chaque photo, et les stocker dans un fichier kml.

J'ai commencé par l'utilisation l'outil exiftool. C'est un outil très complet permettant de nombreuses manipulations des données EXIF contenues dans toutes sortes de fichiers. L'option -p associée à un fichier décrivant le format attendu, permet de construire des fichiers textes à partir de fichiers contenant des données EXIF.

Description du format d'un fichier, à mettre dans un fichier format.fmt:

#[HEAD]<?xml version="1.0" encoding="UTF-8"?>
#[HEAD]<kml xmlns="http://earth.google.com/kml/2.0">
#[HEAD]  <Document>
#[SECT]    <Folder>
#[SECT]      <name>${createdate#;DateFmt("%Y-%m-%d")}</name>
#[IF]  $gpslatitude $gpslongitude
#[BODY]      <Placemark>
#[BODY]        <name>$createdate</name>
#[BODY]        <Point>
#[BODY]          <altitudeMode>clampedToGround</altitudeMode>
#[BODY]          <coordinates>$gpslongitude#,$gpslatitude#,0</coordinates>
#[BODY]        </Point>
#[BODY]      </Placemark>
#[ENDS]    </Folder>
#[TAIL]  </Document>
#[TAIL]</kml>

Ligne de commande, à mettre dans un fichier commande.bat

exiftool -p format.fmt %1 > out.kml

En glissant un répertoire contenant des photos vers le fichier commande.bat, on obtient le fichier kml souhaité.

Le processus est plutôt lent. De plus s'il y a plus de 2000 photos, le fichier kml n'est pas accepté par MyMaps. Il est certainement possible de faire mieux en améliorant le fichier de commande, mais j'ai préféré réaliser un utilitaire taillé sur mesure.

L'utilitaire jpg_kml

J'ai écrit l'utilitaire jpg_kml en langage tcl/tk. C'est un langage interprété.

L'excellent outil freewrap de Denis R. Labelle permet de rassembler en un seul exécutable l'interpréteur et le programme. Je l'ai utilisé pour créer l'exécutable jpg_kml.exe

Je mets en fin d'article un lien permettant le téléchargement.

Le fait d'utiliser cet utilitaire vaut acceptation des conditions d'utilisation décrites dans le mode d'emploi ci-après.

LICENCE D'UTILISATION

Le logiciel jpg_kml est fourni en l'état. L'utilisateur utilise jpg_kml à ses risques et périls, sans garantie d'aucune sorte de la part de l'auteur.

L'auteur n'est responsable d'aucun dommage subi par l'utilisateur pouvant résulter de l'utilisation ou de la distribution du logiciel jpg_kml.
De la même façon, l'auteur n'est en aucun cas responsable d'une quelconque perte de revenus ou de profit, ou de données, ou de tous dommages directs ou indirects, susceptibles de survenir du fait de l'utilisation du logiciel ou pour la raison que celui-ci serait inopérant, quand bien même l'auteur aurait été averti de la possibilité de tels dommages.

jpg_kml est gratuit pour une utilisation privée, éducative ou professionnelle. Toute utilisation commerciale nécessite l'achat d'une licence d'utilisation.

L'auteur ne peut pas garantir que jpg_kml est exempt de bogues, erreurs, défauts ou omissions et n'a aucune obligation de corriger ces éventuelles déficiences, quelles qu'elles soient. L'auteur ne peut pas garantir l'adéquation de jpg_kml aux besoins de l'utilisateur.

L'utilisation du logiciel jpg_kml vaut acceptation par l'utilisateur des termes de la licence ci-dessus.

RESSOURCES

Ce programme est écrit en TCL. Il a été empaqueté dans une version pour logiciel d'exploitation Windows avec freewrap de Dennis R. Labelle

NOTICE D'UTILISATION

Ce programme est utilisé pour créer des fichiers kml à partir de photos jpg. Le but est de représenter sur une carte tous les endroits où une photo a été prise, avec sa date. La photo elle-même n'est pas prise en compte.

Le programme balaye un répertoire de photos jpg et repère pour chaque jpg les informations suivantes:

  • DateTimeOriginal
  • GPSLatitude
  • GPSLongitude
  • GPSLongitudeRef
  • GPSLatitudeRef

Il utilise les données GPS pour créer un point sur la carte. Puis il utilise la date et l'heure pour donner un nom au point. Enfin il regroupe tous les points d'une même journée dans un 'folder' (calque sur la carte) et nomme ce folder avec la date de cette journée.

Le programme est téléchargeable sous la forme d'un fichier .zip contenant:

  • un exécutable jpg_kml.exe,
  • et un fichier d'aide: jpg_kml.htm
Il se lance:
  • soit en glissant/déposant le répertoire des photos sur le fichier jpg_kml.exe
  • soit en ligne de commande.
Dans ce dernier cas, il faut mettre des "" autour du nom du fichier si ce nom comporte des espaces.

Options du programme:

nFolders suivi d'un nombre

Change la limite du nombre de Folders dans un fichier kml. Par défaut, la limite est à 10, ce qui correspond au nombre de calques autorisés dans une carte MyMaps de Google.

noDayCut

Ne change pas de Folder à chaque changement de date. Dans ce cas un seul Folder est créé par kml. Les photos y sont rangées par horodatage croissant.

nPlacemarks suivi d'un nombre

Change la limite du nombre de points par fichier kml. Par défaut la limite est de 2000 ce qui correspond à la limite autorisée pour l'importation d'un fichier kml dans une carte MyMaps de Google.

nKml suivi d'un nombre

Change le nombre maximum de fichiers kml créés. Par défaut ce nombre est de 20. Lorsque les limites nFolders et nPlacemarks sont atteintes pour un fichier kml, le programme en crée un nouveau autant de fois que nécessaires, jusqu'à cette limite. Cela évite de créer un grand nombre de fichiers à cause d'un mauvais choix de valeurs d'options.

noInfo

Par défaut, il se crée dans le répertoire du fichier exécutable un petit fichier dont le nom évolue en permanence pour indiquer l'état d'avancement du traitement. Ce fichier disparaît à la fin du traitement. L'option noInfo retire cette fonctionnalité.

noLine

Par défaut, une ligne est dessinée entre les points de chaque calque. L'option noLine permet de ne pas dessiner ces lignes.

mkLst

Permet de récupérer la liste des photos dans le fichier out_jpg_kml_lst.txt déposé dans le répertoire du fichier exécutable. Cette liste comporte en première partie toutes les photos qui n'ont pas d'information GPS, et en seconde partie les autres photos triées par horodatage croissant avec leurs coordonnés GPS.

mkLog

Active un fichier out_jpg_kml.log contenant certaines informations de déroulement du programme. Cette option s'active automatiquement en cas d'erreur pour permettre de garder une trace.

Utilisation des options:

Deux méthodes sont possibles:

En ligne de commande avec le répertoire

Mettre les options dans la ligne de commande avec le nom du répertoire des photos, dans n'importe quel ordre, séparées par un ou plusieurs espaces.
Les options demandant un nombre doivent être suivies d'un nombre séparé aussi par un espace

Exemple: jpg_kml.exe "repertoire de mes photos" nPlacemark 500 noDayCut nFolders 5

Ou bien dans le nom du fichier exécutable

Ecrire les options dans le nom du programme en les séparant par un de ces caractères: sous-tiret, moins, point ou slash ( _ . - ou / )
Les options demandant un nombre doivent être suivies d'un nombre séparé aussi avec un de ces caractères.
Le nom du fichier exécutable comporte l'ensemble du répertoire où il est situé.

Exemple: renommer jpg_kml.exe
en : n-importe-quoi_nPlacemark_500_noDayCut_nFolders_5.exe

Exemple: mettre l'exécutable jpg_kml.exe dans un répertoire nommé nFiles_10

Les options passées en ligne de commande prennent le pas sur celles identiques passées par le nom du fichier.

Format des fichiers kml créés

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://earth.google.com/kml/2.0">
  <Document>
    <Folder>
      <name>2017:09:05</name>
   
      <Placemark>
        <name>2017:09:05 00:11:32</name>
        <Point>
          <altitudeMode>clampedToGround</altitudeMode>
          <coordinates>-115.58912833333333,32.41555833333334,0</coordinates>
        </Point>
      </Placemark>
   
    </Folder>
  </Document>
</kml>

Lien de téléchargement


Par ici