Afficher des traces GPX avec Drupal 7 et Leaflet

Le module Leaflet pour Drupal 7 permet de créer des cartes interactives et d’afficher des objets géographiques (points, courbes, polygones) sur ces cartes. Je décris ici une méthode simple pour afficher une ou plusieurs traces GPX et des points d’intérêt sur une carte OpenStreetMap.

Pour présenter plusieurs objets géographiques sur une carte, on utilise

  • des nœuds qui possedent chacun un champ du type geofield et
  • une vue qui utilise le format Carte Leaflet et pour afficher ces nœuds sur une carte

Pour les détails, consultez la documentation du module sur drupal.org.

Le champ geofield contient des données géospatiales au format WKT (Well Known Text), une représentation textuelle des coordonnées géographiques d’un point ou des points d’une courbe ou d’un polygone. Le format WKT est le seul format géospatial accepté par le module Leaflet. Le module peut afficher le contenu du nœud dans une info-bulle ou un popup. Ce fonctionnement convient très bien quand il s’agit de présenter des nœuds géolocalises sur une carte. Quand on a un type de contenu pour décrire un lieu avec sa géolocalisation, il est ainsi facile de créer une vue qui affiche un marqueur pour chacun de ces lieus avec l’accroche de l’article dans le popup du marqueur.

Il est moins évident de créer une carte sur laquelle on affiche un itinéraire et des points d’intérêt le long de cet itinéraire. Quand on utilise Leaflet (ou OpenLayers) sans Drupal, une solution simple consiste à utiliser un fichier GPX qui contient la trace de l’itinéraire et les points d’intérêt sous forme de waypoints. Leaflet prend le fichier GPX en entrée et affiche aussi bien la trace que les waypoints et crée des popups à partir des attributs des waypoints. A cause de la limitation au format WKT, cette solution ne fonctionne malheureusement pas en Drupal. J’utilise donc la méthode suivante :

  • On crée deux types de contenu :
    • un type de contenu GPX qui contient un champ du type fichier dans lequel on stocke la trace GPX de l’itinéraire. On ajoute un champ de type geofield et on utilise le widget geocode from another field du module geocoder avec comme source le fichier GPX. La trace GPX sera ainsi transformé en WKT et enregistré dans le geofield
Type de contenu GPX

Type de contenu GPX

- un type de contenu *WP* pour les points d'intérêts où on utilise le *widget Leaflet* pour saisir la localisation du point et de le stocker dans un champ de type *geofield* du même nom que celui du contenu itinéraire.
Type de contenu WP

Type de contenu WP

  • On crée une vue au format Carte Leaflet qui s’applique à ces deux types de contenu et qui utilise le geofield qui porte le même nom dans les deux types de contenu.
  • On autorise le filtrage contextuel par node id avec l’option “autoriser plusieurs valeurs”
  • On assigne le chemin /vue_carte à la vue

Si le nœud x est de type GPX et les noeuds y et z sont des nœuds de type WP, l’url /vue_carte/x+y+z affichera alors une carte avec la trace GPX et les deux points d’intérêt.