Le canal de Nantes à Brest

Ce billet a été écrit par Édouard Hue.

J’avais déjà passé un certain temps sur le sujet du canal d’Ille-et-Rance. Il s’agit d’un petit canal de navigation reliant Rennes à la Manche, construit au début du XIXe siècle sous l’impulsion de Napoléon Ier pour contourner le blocus maritime. La région Bretagne, qui en est aussi l’actuel gestionnaire, a amplement étudié l’objet et chaque écluse est inscrite à l’inventaire général. Certaines font même l’objet d’une protection au titre des monuments historiques. L’institution publique d’exploitation, Canaux de Bretagne, fournit des aides à la navigation, dont une liste exhaustive des écluses et la distance qui les sépare. L’IGN a aussi effectué un relevé altimétrique de quelques uns des limnimètres qui les équipent. Bref, ce fut un jeu d’enfant de croiser toutes ces informations dans un tableur, de créer tous ces éléments dans Wikidata et d’en faire quelques visualisations. C’est aussi une partie de plaisir que de partir en expédition pour aller photographier ces ouvrages d’art dans un environnement des plus bucoliques.

Le canal d’Ille-et-Rance.

Toutefois, le canal d’Ille-et-Rance, avec son unique bief de partage et ses 48 écluses, est bien petit à côté du canal de Nantes à Brest ; 3 biefs, 237 écluses, 5 départements traversés, c’est un ouvrage d’une toute autre ampleur. Et qu’en est-il sur Wikidata ? Rien, ou presque ! Le canal dispose d’un élément, mais pas la moindre écluse… C’est une feuille blanche qui ne demande qu’à être remplie !


Commençons par la modélisation : comment décrire un canal dans Wikidata ? Apparemment, peu se sont déjà adonnés à l’exercice et le canal d’Ille-et-Rance semble être le seul qui rassemble ses écluses en un ensemble cohérent. Comme souvent sur Wikidata, l’usage vaut règle : je choisis de reprendre la même structuration. Les écluses seront ”partie de” l’élément du canal, et réciproquement, avec mention de leur numéro d’ordre. La position dans la série et la distance à la première écluse seront quant à elles indiquées à l’aide de qualificateurs sur la propriété ”parcours le long de”. Les informations géographiques comporteront les coordonnées GPS, l’altitude et le lieu géographique, qui sera le cours d’eau qu’elles aménagent. La localisation administrative sera, sans surprise, la commune sur le territoire de laquelle elles se trouvent. Enfin, il sera fait mention de la protection patrimoniale, quand elle existe.

Mais à la différence du canal d’Ille-et-Rance qui emprunte essentiellement les cours canalisés de… l’Ille et de la Rance, le canal de Nantes à Brest compte trois longues portions artificielles : la jonction de Bout-de-Bois entre l’Erdre et l’Isac (8 écluses), la Jonction d’Hilvern entre l’Oust et le Blavet (53 écluses) et la Jonction du Coronc entre le Doré et l’Hyères (46 écluses). Le service de l‘inventaire les distingue du canal, mais il distingue également les biefs de partage (Tranchée de Glomel et Tranchée d’Hilvern) qui sont notables par l’ampleur des travaux de terrassement qu’ils ont nécessité. J’ai donc créé à part ces éléments, en réutilisant les coordonnées des écluses à chaque embouchure.

Les trois portions artificielles du canal.

Récupérons au passage l’identifiant des autres cours d’eau empruntés. Pour l’Erdre, l’Isac, l’Oust, le Blavet, l’Hyères et l’Aulne, c’est facile, il n’y a pas trop d’homonoymes ou d’ambiguïtés. Mais ça se corse pour le Doré : le cours d’eau est trop peu important pour avoir un article sur Wikipédia et la recherche sur le terme dans Wikidata retourne des centaines de résultats (les œuvres du peintre Gustave Doré, une variété de pomme de terre, une pléthore d’individus dont c’est le patronyme, un royaume toupouri — sans charre, une maison de disques, un chaussetier, une patrouille acrobatique…) En s’en tenant aux étendues d’eau, on réduit à une petite soixantaine, dont un bon paquet de lacs Doré — grâce à (ou à cause de) l’action conjuguée de Geonames, User:GZWDer, la Wikipédia en suédois et la monotonie de la toponymie québecoise. Las, pas de Doré breton, créons-le !

Les œuvres de Gustave Doré.

Les cours d’eau au libellé doré.


Le canal compte 237 écluses, cela fera autant d’éléments à créer. Avec le libellé et la description en français, la nature, « partie de » et sa réciproque, les localisations administrative et géographique, les coordonnées, « parcours le long de », le statut patrimonial et l’identifiant associé, il y aura jusqu’à treize assertions par écluse, soit environ 3 081 assertions. Quick Statements fera le travail.

La position de chaque écluse sur le canal peut être décrite avec la propriété « parcours le long de ». Avec les qualifieurs appropriés, on peut indiquer son numéro d’ordre et sa distance depuis une embouchure, mais aussi indiquer l’écluse précédente et la suivante. Pour construire tout cela avec Quick Statements, il faut connaître l’identifiant des éléments suivant et précédent. Quick Statements est fort, mais pas à ce point : il faudra procéder en deux étapes : créer toutes les écluses puis indiquer leur relation d’ordre. Nous y reviendrons.


Démarrons la construction des assertions dans Calc à partir des sources existantes. Canaux de Bretagne fournit un tableau PDF des écluses avec le numéro d’ordre (l’écluse de Saint-Félix à Nantes est considérée comme la première), la commune, le cours d’eau et la distance. Heureusement, le PDF a une couche texte qu’il est facile de réintégrer dans le tableau avec quelques retraitements manuels.

Il nous faudrait maintenant les coordonnées GPS de chaque écluse. Géoportail pourrait nous les donner mais son API ne semble pas permettre de retrouver facilement les écluses qui nous intéressent. En revanche, un coup d’œil sur OpenStreetMap nous apprend que chaque écluse dispose de coordonnées et que le canal est représenté par une relation qui court de bout en bout. Une écluse est représentée par une way avec un point pour chaque porte. C’est même trop précis pour nos besoins ! Les attributs comprennent le numéro, qui semble cohérent avec le tableau de Canaux de Bretagne, ainsi que le nom. Il sera facile de faire correspondre les deux listes. On utilise Overpass Turbo pour extraire une liste des ways de type écluse rattachées à la relation qui représente le canal. On demande à Overpass de ne renvoyer que le barycentre des points, bien que l’on aurait pu s’amuser à indiquer les coordonnées de portes amont et aval, en utilisant le qualifieur « partie concernée ».

Le résultat est presque complet, il ne manque que quatre écluses (n° 17 à Fégréac, n° 42 à Lanouée, n° 93 à Neulliac, n° 108 à Pontivy), dont certaines à la confluence de cours d’eau, dont l’absence est peut-être plutôt due à la requête. Les numéros d’écluse se suivent, ils sont cohérents avec le document de Canaux de Bretagne, l’alignement dans Calc est facile. Les quatre écluses manquantes sont complétées avec Géoportail. Pas de chance, contrairement aux écluses sur la Vilaine, l’IGN n’a pas relevé l’altitude du zéro des limnimètres, on ne pourra pas faire de profil altimétrique du canal. On trouve bien des repères mais ils ne sont pas placés de façon uniforme : parfois sur les bajoyers, parfois sur les murs aval ou amont, et aussi sur les maisons éclusières. Le changement d’altitude est trop faible d’une écluse à l’autre pour tolérer quelques décimètres d’imprécision. Le service d’estimation de l’altitude du Géoportail souffre des mêmes lacunes.


Les communes où se trouvent les écluses sont faciles à récoler : les dernières versions d’OpenRefine intègrent un nouveau service de réconciliation avec Wikidata. J’importe mon tableau dans OpenRefine, je réconcilie ma colonne « commune » (OpenRefine devine tout seul la nature correcte à partir de quelques échantillons), j’export le tout et le tour est joué.

Résultat de la réconciliation des noms de commune dans OpenRefine.


L’aspect « conservation du patrimoine » est plus compliqué. La région Bretagne a produit un très beau portail de consultation de l’inventaire du patrimoine de la région — qui répond au doux nom de Gertrude, très fouillé, bien documenté… mais difficilement liable depuis le reste des Internets et sans aucune API. Même la base Mérimée est plus accessible de ce point de vue : on peut au moins construire une URL vers un monument dont on connaît l’identifiant Mérimée ! Gertrude utilise quant à elle des GUID dans ses permaliens. On peut tout juste construire une requête au moteur de recherche qui précise un identifiant Mérimée, en espérant que le lecteur voudra bien cliquer sur le résultat de cette recherche.

En revanche, le service du patrimoine a réalisé une étude très fouillée du canal. Celui-ci est considéré par tronçons (on retrouve les canaux de jonction évoqués plus haut ainsi que les voies naturelles), puis par œuvre, avec quelques regroupements intermédiaires. Chacun de ces élément (tronçons et œuvres) dispose de son propre dossier, avec un identifiant à l’inventaire et un permalien. Mais sans moteur de recherche, comment retrouver l’identifiant de dossier de chaque écluse sans éplucher le site manuellement ? La structure des pages est homogène, un crawler assez simple devrait s’en sortir. Un coup de Google : l’état de l’art des crawlers DIY semble être Scrapy, une boîte à outils écrite en Python qui promet l’écriture de crawlers en quelques minutes. Résumons le besoin :

La liste des URL se construit facilement à grands coups de copier-coller et chercher-remplacer, surtout à partir de cette page qui liste les sites d’écluse, plus quelques chaînes d’écluses supplémentaires. On extrait au passage le numéro de l’écluse pour raccrocher le résultat aux données existantes.

Le crawler s’écrit effectivement très facilement. Ce n’est pas très élégant d’écrire en dur les URL à crawler dans le code source, mais j’ai préféré faire l’économie d’une lecture de fichier ligne à ligne. Un sélecteur CSS assorti d’une expression régulière suffit à extraire l’identifiant de dossier. On obtient un fichier CSV, là encore facile à croiser car les résultats sont triés dans le même ordre qu’en entrée.


Peut-on tirer quelque chose de la base Sandre ? Le canal est un cours d’eau, effectivement présent dans la base, et son identifiant est déjà renseigné sur Wikidata. Mais seules quelques écluses sont identifiées dans la base des obstacles à l’écoulement et il n’y a pas de propriété pour cette base dans Wikidata. L’intérêt est plutôt limité, on n’approfondira pas le sujet.


Le fichier d’assertions est complet, on peut passer à Quick Statements. Problème : à ce jour, Quick Statements ne supporte ni les quantités ni les nombres décimaux : impossible d’indiquer que la distance qui sépare les écluses est exprimée en kilomètres ; il faudrait de plus convertir les distances en mètres pour retrouver des entiers, ce qui ne serait pas totalement respecter le degré de précision fourni par les sources. Patchons Quick Statements ! Quelques lignes de PHP et de Javascript plus tard, non dénuées de quelques bugs, Quick Statements supporte les quantités et les décimales.

Encore quelques manipulations de colonnes et le tableau Calc est prêt : allons-y !


Un contributeur avisé n’envoie pas toutes ses assertions d’un coup mais procède d’abord à quelques essais prudents. Un essai avec les premières lignes du tableau permet de remarquer l’oubli de guillemets autour des identifiants issus de Gertrude. Ce sera facile à corriger avec un deuxième lot de Quick Statements, à condition de retrouver les identifiants des éléments créés. Facile, il suffit de lister les écluses dans l’ordre. Facile ? Ce rang est la valeur d’un qualifieur, la requête SPARQL n’est pas si triviale.

Les écluses triées par leur rang depuis l’écluse de Saint-Félix à Nantes.

Une fois ces petits détails réglés, on peut créer les dernières assertions. On se rend compte — trop tard — qu’il subsiste un problème de traitement des nombres décimaux, malgré les précautions prises : une représentation du nombre en virgule flottante intervient quelque part dans la chaîne Quick Statements → Widar → API Wikidata et transforme, par exemple, « 363,7 » en « 363,69999999999998863131622783839702606201171875 ». Il faudra corriger manuellement.

La requête précédente permet de lister toutes les écluses créées et de réintégrer leur identifiant dans le tableau, pour passer à la deuxième phase : les lier entre elles avec les qualifieurs P155 (« précédé par ») et P156 (« suivi par ») sur la propriété P795 (« situé le long de ») déjà renseignée.


Et voilà ! Chaque écluse du canal apparaît sur la carte et un bot pourrait naviguer d’un bout à l’autre en suivant la propriété P795. Mais on pourrait aller encore plus loin : la base Gertrude comporte des informations qu’on a laissées de côté : année de construction, ingénieurs du génie civil… toutes choses qu’un crawler un peu raffiné pourrait extraire. Les écluses noyées de Guerlédan mériteraient aussi qu’on mentionne qu’elles ne sont plus en service. Certaines écluses disposent aussi d’une catégorie Commons et de photos, mais la couverture est loin d’être exhaustive : il y a là quelques sorties photos à organiser.

La Tranchée de Glome (vue prise du côté de Nantes) — Duclos, J., photographe installé à Quimper et à Lorient — Photographie provenant de l’Ecole nationale des Ponts et Chaussées.

Toutes les écluses du canal sur une carte. En rouge : pas de photo !


Et voici le code source du crawler et les requêtes citées dans ce billet :