Bonjour chers lecteurs de SITDI-France, Au fur et à mesure de nos idées et découvertes, SITDI-France partage quelques tutoriels sur FME Workbench. Après l’article traitant des stations de vélos en libre service et de leurs distances aux routes et bâtiments, voici un exemple sur ce qu’il est possible de faire en termes de courbes de niveaux avec FME. Dans un prochain article à paraître très rapidement, nous utiliserons ces données pour drapper des orthophotographies en 3D. Bonne lecture !

Données sources

Pour cet exercice, nous aurons besoin d’un (MNT : Modèle Numérique de Terrain issu du projet SRTM)  et du contour de la commune de Thann (donnée vectorielle issue du projet OpenStreetMap, OSM).

Données MNT du SRTM disponible après inscription

Téléchargement des données SRTM nasa, capture d'écran

Téléchargement des données SRTM nasa, capture d’écran

Données OSM (OpenStreetMap)

Les données issues de la base OSM sont nombreuses et disponibles sur le web. Chaque année, des contributeurs très attentionnés mettent à disposition des jeux de données sur les communes Françaises qui subissent beaucoup de modifications ces derniers temps. Le lien permettant de télécharger les communes 2018 est disponible directement ici

Capture d'écran du rendu cartographique d'OpenStreetMap (OSM)

Capture d’écran du rendu cartographique d’OpenStreetMap (OSM)

Exercice 1 : générer des courbes de niveaux

Le premier exercice consiste à créer des courbes de niveaux à partir des données du MNT. Le Modèle Numérique de Terrain du SRTM propose une précision d’un pas de 30 mètres ce qui va nous permettre de proposer des courbes de niveaux tous les 30 mètres de dénivellation. Sur FME, la génération de ces courbes de niveaux s’effectue facilement via un seul transformer. 1) Ajoutez un Reader « SRTM HCG » avec le fichier MNR SRTM et regardez le avec Data Inspector

Reader SRTM .HGT FME Workbench

Reader SRTM .HGT FME Workbench

Visualisation du MNT sur Data Inspector

MNT SRTM au format .hgt visualisé sur FME Data Inspector

MNT SRTM au format .hgt visualisé sur FME Data Inspector

2) Ajoutez un Writer vectoriel de votre choix, par exemple .SHP qui nous permettra d’écrire nos futures courbes de niveaux. 3) Trouvez le transformer adéquate pour effectuer la transformation.

Transformer FME ContourGenerator : permet de générer des courbes de niveaux

Transformer FME ContourGenerator : permet de générer des courbes de niveaux

Aide : Le transformer doit générer des Contours…

  • Il s’agit de ContourGenerator !
  • Connectez le Reader sur le port Points/Lines et paramétrez le.

Astuce : N’hésitez pas à ouvrir la page d’aide si vous souhaitez en savoir davantage sur les paramétrages disponibles.

Le paramétrage nécessite de remplir les champs « Surface Tolérance » , à 0 dans notre cas et « Output Contour Interval » (ici nos fameux 30 mètres). Regardez que le champ « Output Elevation Attribute » qui recevra l’altitude de votre courbe de niveau est renommée par défaut « _elevation ». Cette information permettra de donner la dimension 3D (Z) à nos lignes .

Paramétrage Transformer ContourGenerator FME

Paramétrage Transformer ContourGenerator FME

Data Inspector : La génération des courbes de niveaux au pas de 30 mètres sur la dalle SRTM retenue Courbes de niveaux issues du MNT SRTM 30m via FME Info : L’attribut « _elevation » est disponible en tant qu’attribut. Il s’agit de l’altitude de chaque courbe de niveau.

Attribut de l'élévation de la courbe de niveau sur Data Inspector

Attribut de l’élévation de la courbe de niveau sur Data Inspector

Script FME (téléchargement)

Capture d'écran script FME pour générer des courbes de niveaux depuis un MNT

Capture d’écran script FME pour générer des courbes de niveaux depuis un MNT

Un traitement qui peut être long : optimisation en fonction du besoin (cas sur la commune de Thann)

Connectez un Inspector et lancez le processus. Attention le processus peut-être long surtout si votre MNT est grand. Sur la dalle du Haut-Rhin, mon ordinateur disposant d’un bon processeur a besoin de presque 3 minutes pour générer les courbes de niveaux .

Couper le MNT sur la commune de Thann

Il est peut-être opportun de couper le MNT sur une commune en amont (ou sur votre territoire de travail). Ajoutez un Reader .shp de la commune de Thann disponible dans Data et utilisez le Transformer Clipper pour couper le MNT en amont du Transformer ContourGenerator.

Découpage du MNT par le polygone de la commune de Thann

Capture d'écran FME pour découper via le transformer Clipper les courbes de niveaux

Capture d’écran FME pour découper via le transformer Clipper les courbes de niveaux

Astuce : Si vous vous demandez dans quel port du Clipper doit aller votre MNT ou votre commune, traduisez Clipper par Découpeur et Clippee par découpé. Ici, nous souhaitons découper le MNT (Clippee) par la commune de Thann qui devient le découpeur et donc passe par le port Clipper.

Suite à cela nous passons notre morceau de MNT qui ressort par le port Inside de notre Clipper (à l’intérieur) dans le Transformer « ContourGenerator » avec les paramètres identiques et nous observons ce qu’il se passe.

Résultat : Nos courbes de niveaux sont créées avec des artefacts au delà de la commune

Courbes de niveaux générées via FME avec artefacts au delà de la commune

Courbes de niveaux générées via FME avec artefacts au delà de la commune

ContourGenerator a donc bien fait ce qu’on lui demandait mais il a créé des courbes fictives pour que toutes les lignes soient fermées. Pour corriger ce problème, il est nécessaire de passer les courbes de niveaux dans un second « Clipper » qui prendra les courbes dans les port « Clippee » et la commune de Thann dans le port « Clipper ». Comme pour tout à l’heure, nous récupérerons les lignes qui nous intéressent dans le port « Inside » (à l’intérieur) du Transformer Clipper.

Résultat : Les courbes de niveaux à l’intérieur de la commune de Thann via un second Clipper

Courbes de niveaux générées via FME sur une commune

Courbes de niveaux générées via FME sur une commune

Script FME (téléchargement)

Capture d'un script FME pour générer les courbes de niveaux d'une commune

Capture d’un script FME pour générer les courbes de niveaux d’une commune

Information : Ce traitement n’aura pris que 1.2 secondes pour effectuer ce traitement contrairement aux quasi 3 minutes pour la dalle complète !

Fanout dataset : comment créer un SHAPE par commune du haut-Rhin ?

Au besoin, nous pourrions ajouter toutes les communes du Haut-Rhin (disponible dans Data) pour ensuite générer un shape des courbes de niveaux par commune. Ajoutez alors toutes les communes, coupez le MNT puis générer un SHAPE par commune en utilisant le paramètre « Fanout dataset» disponible dans Writer via le Navigateur. Pensez également à renommer le nom de la couche de votre SHAPE par le nom de la commune en modifiant le paramètre « Shapefile Name » avec l’attribut du nom de la commune et à modifier la projection de destination pour reprojeter les données en Lambert93 (code EPSG : 2154) via le navigateur.

FME : reprojection de la couche directement via le navigateur

FME : reprojection de la couche directement via le navigateur

Attention : Au préalable il sera nécessaire de laisser passer les attributs de notre Reader commune dans nos deux clippers en cliquant sur « Merge Attributes » dans la fenêtre de paramétrage . « Merge attributes des Clippers »

Paramètres du transformer FME Clipper avec Merge Attributes de coché

Paramètres du transformer FME Clipper avec Merge Attributes de coché

Fanout dataset : il se gère directement dans le navigateur via la ligne « Fanaout Dataset » de votre Writer

FME, répartition des données via Fanout dataset

FME, répartition des données via Fanout dataset

Paramétrage du nom du FeatureType (nom de la couche)

Paramètrage writer FME FeatureType (nom de la couche)

Paramètrage writer FME FeatureType (nom de la couche)

Avec ce paramétrage vous aurez la possibilité de générer un fichier SHAPE des courbes de niveaux de vos communes. Ce dernier prendra en outre automatiquement nom de la commune en question. FME is magic, is’t it ?:) En faisant l’essai sur les communes ayants un nom commençant pas la lettre « T »

Paramètre du Transformer FME Tester avec comme condition LIKE T%

Paramètre du Transformer FME Tester avec comme condition LIKE T%

Il y a 7 communes qui répondent à ce critère mais en regardant le flux de données, il n,’y a que 5 communes qui touchent les données SRTM et par conséquent le traitement ne génère que 5 Shapefile. Les fichiers sont nommés par le nom de la commune, le nom de la couche également et les fichiers sont rangés dans un dossier portant aussi le nom de la commune.

Script FME (téléchargement)

Capture d'un script FME pour générer les courbes de niveaux avec fanout dataset (répartition)

Capture d’un script FME pour générer les courbes de niveaux avec fanout dataset (répartition)

Résultat

Le Fabout By (répartition) a créé un dossier par FeatureType

Le Fanaout Dataset (répartition) a créé un dossier par FeatureType

Ce tutoriel s’achève et nous espérons avoir réussi de vous convaincre de toute la puissance de cet outil ETL spatial.Comme annoncé s’en suivra un autre tutoriel qui utilisera les courbes de niveaux pour drapper une vue aérienne sur la commune de Thann. D’autres découvertes et bonus seront également disponibles.

Màj : Le tutoriel sur le Drappage d’une orthophoto est dès à présent disponible en suivant ce lien.

A bientôt pour d’autres découvertes avec FME et d’ici là, n’hésitez pas à solliciter SITDI-France pour que nous puissions vous aider à valoriser vos géo-données !