Aller au contenu

ign2map : du site à la carte en 7 étapes#

📆 Date de publication initiale : 15 Février 2021

Mots-clés : bash | IGN | Leaflet | sed | awk

Intro#

icône IGN

A la surprise de tous, l'IGN annonçait l'ouverture de ses données fin 2020 pour une libération au 1er Janvier 2021.
Après des mois à attendre la refonte de l'espace professionnel, nous étions nombreux à penser que cette dynamique d'ouverture allait s'accompagner du lancement d'une plateforme ergonomique de téléchargement des données mais que nenni! Les liens ont continué à s'accumuler sur une page unique.

Dans ce contexte, on s’interrogeait en coulisses sur une manière de rendre cette masse d'informations plus lisible par tous 👇.

How it started#

Slack GeoTribu

Le 18 Janvier dans les coulisses de GéoTribu 🤫

La solution proposée par Julien ne paraissait pas trop complexe à mettre en oeuvre mais pour corser le tout on a décidé :

  • De travailler en Bash
  • De se répartir les tâches de la manière suivante :
    • @Flo sur la construction des scripts
    • @Ju l’enchainement des scripts et sur le déploiement

Et c'est parti pour une aventure en 7 étapes 🚀 !


1. Scraping du site de l'IGN#

Le scraping est une technique qui permet de récupérer le contenu d'une page web en vue de le réutiliser (voir aussi cet article ou celui-ci).
On a donc scrapé le site de l'IGN pour en extraire tous les liens qui s'y trouvaient (ftp, https et http) et on les a ensuite stockés dans un fichier texte.

Solutions utilisées :

  • curl pour le téléchargement de la page.
  • grep pour extraire les liens.
1
2
curl "$SOURCE_URL" | \
  grep -oE '\b(https?|ftp|file)://[-A-Za-z0-9+&@# /%?=~_|!:,.;]*[-A-Za-z0-9+&@# /%=~_|]' > "$OUTPUT_FILE"

Liens IGN

Consulter le script complet


2. Extraction des fichiers par département, région et pour la France#

Une fois tous les liens extraits, on a :

  1. lu notre fichier texte pour ne conserver que les liens possédant un identifiant par exemple pour les départements : D001, D976,...
  2. exporté le résultat dans des fichiers csv séparés pour chacun des identifiants en prenant le soin d'ajouter une colonne avec l'identifiant.

Cette étape a été répétée pour les régions et pour la France.

1
grep -E "D$val|DEP_$val" $SOURCE_FILE | awk '{ printf("%s,D'$val_t'\n", $0); }' > "$OUTPUT_DIR/D$val_t.csv"

Liens IGN par id

Consulter le script complet


3. Nettoyage des liens (format, doublons)#

Comme on peut le voir sur la capture précédente, il y a de nombreux doublons liés notamment à la structure de la page html puisque l'IGN affiche le lien complet sur sa page :

1
<a href="https://url.com">https://url.com</a>

On a donc utilisé :

  • sort pour trier les liens et ne conserver qu'un seul lien unique.
  • grep pour ne garder que les liens ayant une extension .7z (extension utilisée par l'IGN pour compresser ses fichiers).
1
cat "$INPUT_DIR"/2_departements/*csv | sort -u | grep -F '.7z' > "$OUTPUT_DIR/3_liens_par_dep_clean_ext.csv"

En sortie, on obtient un fichier csv propre par découpage géographique.

Liens IGN propres

Consulter le script complet


4. Mise en forme des données avant jointure#

Les liens étant proprement organisés, nous avons ensuite généré un fichier csv par produit IGN (BDORTHO, BDFORET,...) en réalisant également une transposition par identifiant géographique afin de faciliter la jointure prévue après.

Liens IGN type

Consulter le script complet


5. Création des topojson#

Mapshaper a été utilisé pour créer les fichiers topojson en s'appuyant notamment sur la donnée ADMIN EXPRESS de l'IGN. Ces fichiers topojson utilisés par la suite comme des modèles ne sont générés qu'une seule fois.

A noter la donnée ADMIN EXPRESS n'intègre pas les collectivités d'outre mer (COM). On a donc du compléter ce manque en utilisant le fichier suivant disponible sur Data.gouv.fr : Découpage administratif des COM St Martin et St Barthélemy "Format Admin-Express" mis à disposition par R. Maziere.


6. Jointure avec les topojson#

L'étape de la jointure en bash a sans aucun doute été l'étape la plus prise de tête. Pour faire simple on a utilisé sed pour remplacer l'identifiant géographique de notre topojson source par notre identifiant géographique et les liens associés. En sortie, les nouveaux fichiers topojson ont ensuite été placés dans un répertoire utilisé par la page html de la carte.

Consulter le script complet


7. Création automatique du fichier index.html#

Pour cette dernière étape, l'idée était de pouvoir générer automatiquement la page html pour être plus réactif en cas d'évolution des données libérées par l'IGN.

Après avoir écrit une première mouture de la page html, on a ensuite converti cette page en un modèle en introduisant des variables liées notamment à l'appel des fichiers topojson et à la configuration des popups. Une fois le template prêt, on s'est attaché à remplacer ces variables en utilisant une nouvelle fois sed pour générer de manière dynamique la page index.html.

ign2map html

Consulter le script complet

Lire des topojson avec Leaflet

Dans Leaflet, il est possible de lire des fichiers topojson en utilisant l'extension leaflet-omnivore.

ign2map

Accéder à la carte 🌍


🚀 La publication#

On doit avouer :

  • que le couvre-feu, nous a un peu aidé car il ne nous aura fallu que 15 jours pour arriver au résultat publié et quelques jours de plus pour mettre tout ça au propre.
  • qu'on ne s'attendait pas à un tel retentissement (Quelques chiffres : plus de 40000 vues sur twitter, plus de 700 clics sur le lien du tweet, 250 likes et plus de 110 retweets).

La suite#

Un autre article sera publié dans les prochains jours pour vous expliquer la partie sur l'automatisation et le déploiement depuis Github. Restez connectés à GeoTribu (LinkedIn - RSS - Twitter) 😉.

Suite : automatiser l'exécution et le déploiement


Auteurs#

Florian Boret#

Portrait Florian Boret

Géomaticien/cartographe, je suis arrivé dans le monde de la géomatique en suivant un cursus « professionnalisant » (BTS Géomètre-Topographe, Licence pro GGAT, Master SIGAT). J’ai ensuite travaillé dans un bureau d’études spécialisé dans la production de données d’occupation du sol et puis pour des raisons personnelles je me suis expatrié quelques années au Sénégal où je me suis lancé comme géomaticien indépendant (DATA\WAX).

Depuis mon retour en France, je suis en charge du SIG de la communauté de communes du Pays de Lunel.

En dehors de ces expériences, j'ai aussi régulièrement initié de petits projets personnels iGeo-Topo, GIS-Blog.fr, osm2igeo, osm2igeotopo. Aujourd'hui, c’est avec plaisir que j’interviens également comme contributeur de GeoTribu.

Julien Moura#

Portrait Julien Moura

Géographe "sigiste" de formation, j'ai d'abord travaillé sur différentes thématiques et types de structures : la gestion des déchets en milieu urbain à Madagascar, le foncier d'intérêt général auprès de l'EPF de La Réunion, l'organisation et la résilience urbaine face aux risques naturels à Lima pour l'IRD.

C'est en m'intéressant à la gouvernance et à l'ouverture des données géographiques que je travaille à Isogeo quelques années. L'occasion d'asseoir mes compétences en développement et gestion de produit informatique. En 2020, je deviens indépendant (In Geo Veritas) puis rejoins les rangs d'Oslandia.

Féru des dynamiques de contributions, je participe activement à Geotribu depuis fin 2011 et, comme ça me manquait trop, j'ai décidé de lancer sa renaissance en 2020.


Dernière mise à jour: 19 février 2021
Contributions à cette page : Julien Moura (39.79%), Aurélien Chaumet (0.52%), Florian Boret (59.69%)

Commentaires

Une version minimale de la syntaxe markdown est acceptée pour la mise en forme des commentaires.
Propulsé par Isso.