Tutoriel détaillé sur la création d’une carte de relief hachurée en utilisant les dernières fonctionnalités de QGIS (3.20)
Introduction
En cartographie, les hachures ont servi à indiquer les reliefs sur les cartes d’État-Major qui étaient imprimées en taille-douce. Leur usage, codifié au fil des années, permettait de lire facilement une carte, les hachures disposées dans le sens de la plus forte pente reliaient les lignes de niveau, et étaient d’une épaisseur proportionnelle à l’inclinaison de la pente, selon un « diapason » déterminé par calcul.
Nous n’allons pas, ici, reproduire cette technique en suivant scrupuleusement les calculs de l’époque. Mais nous allons obtenir un, résultat comparable visuellement, suffisamment proche.
Pour une explication détaillée de la technique de hachurage des cartes anciennes, voir https://fr.wikipedia.org/wiki/Carte_d%27%C3%A9tat-major#La_technique_des_hachures
Dans cet article nous allons suivre trois étapes:
- 1- La préparation des données nécessaires (mnt, courbes de niveau,…)
- 2-La réalisation de la carte de relief hachurée
- 3-L’habillage avec l’ajout d’éléments du paysage (cours d’eau, routes, toponymes,…)
Pour la partie technique de hachurage nous avons repris le tutoriel publié par Robin Hawkes (https://robinhawkes.com)
Préparation des données
Obtention d’un MNT (modèle numérique de terrain)
Si vous disposez déjà d’un MNT pour votre zone d’intérêt, vous pouvez l’utiliser directement. Si non, vous pouvez télécharger un mnt à partir de plusieurs sources.
Pour la France, vous pouvez utiliser la BD ALTI de l’IGN. Pour d’autres régions, QGis vous propose le plugin SRTM downloader pour télécharger le mnt de la NASA.
Ici nous allons utiliser les données de l’IGN. Pour les télécharger vous devez disposer d’un outil pour ouvrir les liens ftp, de type Filezilla (https://filezilla-project.org/download.php?type=client)
Allez sur la page de téléchargement des données BD ALTI (https://professionnels.ign.fr/bdalti#telechargement).
Téléchargez le ou les départements qui correspondent à votre zone de travail
Décompressez le fichier téléchargé
Les données sont contenues dans un sous-répertoire sous la forme de fichiers avec l’extension .asc
Pour simplifier le travail, il est conseillé de créer un seul fichier avec l’ensemble des données. pour cela, ouvrez QGis et chargez l’ensemble des fichiers .asc
Pour fusionner l’ensemble des fichiers, nous allons créer un raster virtuel. Allez dans le menu Raster -> Divers -> Construire un raster virtuel
Cliquez sur l’icône … correspondant à Input Layers
Sélectionnez tous les fichiers, puis cliquez sur Exécuter
Vous avez maintenant un raster virtuel contenant le mnt de tout le département.
Pour conserver ce fichier, qui pour l’instant est virtuel, cliquez droit sur la couche -> Exporter -> Enregistrer sous
Dans format, vous pouvez choisir à votre guise, mais si vous optez par GeoPackage, vous pourrez enregistrer les autres couches que nous allons générer dans cet article dans le même fichier.
Le raster virtuel n’ayant pas par défaut de définition du SRC, n’oubliez pas de mettre EPSG:2154 dans le champ SRC
Gardez dans la liste des couches seulement le dernier fichier.
Extraction du MNT de la zone de travail
Pour la suite, nous allons garder le mnt seulement pour la zone de travail. Zoomez sur votre zone de travail. Pour vous aider, vous pouvez charger la couche OSM
Pour extraire le mnt correspondant seulement à la zone affichée, allez sur le menu Raster -> Extraction -> Découper un raster selon une emprise
Dans Étendue de découpage, sélectionnez Utiliser l’emprise du canevas de carte
Cliquez sur Exécuter
Si vous avez, comme ci-dessus, stocké votre MNT sans un fichier GeoPackage, vous pouvez garder l’extrait dans ce même fichier.
Cliquez sur la nouvelle couche (Découpe) -> Exporter -> Enregistrer sous
Dans Format sélectionnez GeoPackage
Dans Nom de fichier sélectionnez le fichier gpkg que vouysd avez créé avec l’ensemble du département
Dans nom de la couche rentrer un nom pour votre zone de travail. Puis, cliquez sur OK.
Gardez pour la suite,dans la liste des couches raster, seulement cette dernière couche.
Pour construire les hachures nous aurons besoin de trois informations:
- Les courbes de niveau
- Les valeurs de pente
- Les valeurs d’Exposition
Calcul des courbes de niveau
L’espacement de calcul des courbes doit être ajusté en fonction de la topographie de la zone. En effet, chaque courbe de niveau sera transformé en hachures. Si les courbes sont trop proches ou trop éloignées, le résultat ne sera pas très esthétique.
L’image suivante montre une densité correcte de courbes de niveau. Dans ce cas précis le choix d’espacement est de 200 m.
Calcul du raster Exposition
Allez dans le menu Raster -> Analyse -> Exposition
Indiquez la couche du MNT de la zone comme Couche source. Comme le raster est une étape de calcul intermédiaire, vous pouvez laisser l’option de création d’un fichier temporaire.
Le résultat est affiché dans la fenêtre cartographique
Calcul du raster Pente
Allez dans le menu Raster -> Analyse -> Pente
Indiquez la couche du MNT de la zone comme Couche source. Comme le raster est une étape de calcul intermédiaire, vous pouvez laisser l’option de création d’un fichier temporaire.
Le résultat est affiché dans la fenêtre cartographique
Placement des points le long des contours
Nos hachures seront tracées à partir de différents points le long de chaque ligne de contour en échantillonnant les valeurs de l’aspect et de la pente que nous venons de générer. Nous allons donc passer des lignes de contour à des points placés le long de ces lignes.
Vous aurez besoin de la Boîte à outils de traitement ouverte pour cela, donc si vous ne la voyez pas déjà, vous pouvez l’ouvrir via le menu Boîte à outils de traitement.
Vous pouvez maintenant générer les points le long des contours :
Allez dans l’item Géométrie vectorielle -> Points le long d’une géométrie
Définissez comme couche source la couche des contours.
La distance correspond à la séparation entre deux points. Ce sera donc la séparation entre chaque hachure. Vous devrez l’ajuster en fonction de l’étendue de votre zone. Ici notre zone fait 35 km de large et nous avons choisi une distance de 100 m.
Le résultat est affiché dans la fenêtre cartographique
Affectation de la pente et de l’exposition à chaque point
Pour construire les hachures nous avons déjà dans les attributs des points le long des lignes de contour l’angle de la ligne à chaque point
Nous avons maintenant à ajouter dans les attributs la valeur de pente et d’exposition pour chacun des points.
Il y a plusieurs façons de faire ceci, mais la plus simple est d’utiliser le plugin Point Sampling Tool de QGis.
Installez le plugin. Assurez vous que les rasters Pente et Exposition sont visibles, puis allez dans le menu Extensions -> Analyses -> Point Sampling Tool
Définissez la couche vecteur contenant les points avec la couche « points interpolés » issus des lignes de contour.
Dans la fenêtre « Couches avec les champs d’où extraire les valeurs: cliques sur les attributs ID, ELEV, distance, angle de points interpolés, ainsi que sur Pente et Exposition.
Pour le fichier en sortie vous pouvez sélectionner le fichier gpkg créé plus haut. C’est cette couche que nous allons utiliser pour générer les hachures. Cliquez sur OK.
Une fenêtre s’ouvre, donnez un nom à la table, par exemple pointshachures
La nouvelle couche est chargée. Vous pouvez voir dans la table d’attributs les valeurs qui ont été ajoutées.
Vous pouvez supprimer toutes les autres couches car elles ne seront plus nécessaires.
Nous avons fini la préparation des données, nous allons voir maintenant la réalisation de la carte de relief hachurée.
Réalisation de la carte de relief hachurée
Ouvrez la fenêtre de Propriétés de cette dernière couche et sélectionnez l’onglet Symbologie. Tout le travail de génération des hachures va se faire ici.
Ce travail va consister à remplacer la représentation ponctuelle des entités par des représentations linéaires. Nous allons utiliser pour cella l’opérateur de QGis « générateur de géométries » pour :
- utiliser le point existant comme point de départ de chaque hachure
- utiliser l’angle de la courbe de niveau originale pour déterminer la direction perpendiculaire à la courbe de niveau
- utiliser la valeur de pente pour déterminer la longueur de la ligne (plus longue en fonction de la pente plus forte)
- donner une forme à chaque hachure (plus épaisse à la base, plus fine à son extrémité)
Pour finir et améliorer le rendu final, nous allons affecter une transparence aux hachures en fonction de leur exposition , par exemple plus transparentes quant elles font face au Nord et plus foncées quand elles sont orientées au Sud.
Pour commencer, cliquer sur le Type de symbole et sélectionnez « Générateur de géométrie » à la place de « Symbole simple »
Dans type de géométrie, sélectionnez Poliligne/Multi-polyligne, car ce que nous voulons générer c’est des lignes de hachure.
La fenêtre affiche $geometry. C’est à dire la valeur de géométrie contenue dans la couche. Nous allons remplacer ce texte par une expression qui construise les lignes de hachure.
Cette expression est la commande make_line(point de départ, point d’arrivée)
Comme nous connaissons le point de départ, c’est à dire le point déjà présent dans la couche, l’expression commencera par
make_line ( $ geometry ,
Pour calculer le point d’arrivée nous allons utiliser la commande project(point de départ, distance,direction)
Le point de départ est le point de la couche : $geometry.
Pour la distance, c’est à dire la longueur de notre hachure, nous voulons changer la longueur de la hachure en fonction de la pente à ce point – plus longue pour une pente plus raide, plus courte pour une pente plus faible. Les valeurs de pente sont un angle entre 0 et 90, 0 étant un sol plat et 90 une paroi verticale. Nous pouvons donc utiliser la pente pour trouver une valeur de distance dynamique.
Tout d’abord il faut convertir la valeur de la pente dans une plage comprise entre 0 et 1, que nous pourrons ensuite utiliser comme facteur multiplicatif d’une distance standard que nous définirons.
Étant donné que nous savons que les valeurs de pente sont entre 0 et 90, nous allons diviser la valeur par 90 pour obtenir une plage d’unités entre 0 et 1.
« Pente » / 90
Il faut compléter cette formule avec une valeur minimale de longueur de hachure quand la pente est nulle, ici nous allons utiliser la valeur de 100 m. Et la longueur maximale à ajouter quand la pente est de 90°, ici 200 m. Notre expression sera alors :
100 + 300 * « Pente »/90
Quand la pente sera de 0° la longueur de la hachure sera de 100 m et quand la pente sera de 90° la longueur sera de 400 m. Bien évidement, vous devrez ajuster ces valeurs en fonction de votre zone de travail.
Trouver la direction est relativement simple car nous avons déjà l’angle des points échantillonnés le long de la ligne du contour. Nous voulons que l’angle soit perpendiculaire au contour, donc tout ce que nous avons à faire est de soustraire 90 degrés à l’attribut « angle ».
Nous ajouterons également un peu de bruit aux lignes en ajoutant une valeur aléatoire entre 0 et 10 degrés. Tout ce qu’il reste à faire est de convertir la direction en radians, nécessaire pour la fonction project().
radians ( « angle » – 90) + rand(0,10)
La fonction complète sera donc:
make_line(
$geometry,
project(
$geometry,
100 + 300 * "Pente" / 90,
radians(("angle" - 90) + rand(0, 10))
)
)
Rentrez ce code dans la fenêtre correspondante
Cliquez sur Appliquer pour voir le résultat et modifier si nécessaire les valeurs utilisées.
Changer l’épaisseur de chaque hachure
Nous pouvons aller un peu plus loin et réduire les hachures afin qu’elles soient légèrement plus épaisses à la base du contour, diminuant jusqu’à un point lorsqu’elles s’éloignent du contour.
Sélectionnez la ligne simple dans le générateur de géométrie pour la couche hachure. Nous allons utiliser une nouvelle fonctionnalité dans QGIS 3.20 appelée lignes interpolées, donc sélectionnez-la dans le menu déroulant du type de symbole.
Nous voulons que les lignes soient plus épaisses à une extrémité, alors sélectionnez Largeur variable dans la liste déroulante de la largeur de trait.
Rentrez les valeurs suivantes :
- Valeur de départ = 1 , pour que la base soit la partie la plus épaisse
- Valeur d’arrivée = 0
- Valeur min = 0
- Valeur max = 1
- Largeur min= 0
- Largeur max = 30
- Changez la valeur de Millimètres en mètres à l’échelle.
Comme pour le reste, vous serez peut-être amené à changer la valeur de largeur max en fonction de votre zone de travail.
Il ne nous reste qu’à voir comment changer l’opacité en fonction de l’exposition.
Modifier la transparence en fonction de l’exposition
Pour définir l’opacité de la ligne interpolée nous devons modifier le type de couleur. Ouvrez le menu déroulant du mode de couleur et sélectionnez Couleur variable.
Rentrez les valeurs suivantes:
- Pour valeur de départ et valeur d’arrivée rentrez l’expression 1 – abs(« Exposition » – 180)/ 180
- Pour Valeur min rentrez 0
- Pour Valeur max rentrez 1
- Laissez le mode d’interpolation à Linéaire
Dans la fenêtre des classes, sélectionnez les classes 0.25, 0.5 et 0.75 et cliquez sur le signe – pour les effacer
Double cliquez sur la couleur correspondante à la classe 0 et définissez une couleur Noire et transparente
Double cliquez sur la couleur correspondante à la classe 1 et définissez une couleur Noire et transparente à 75%
Vous devez avoir une fenêtre comme suit
Cliquez sur OK et le résultat final apparaît
Habillage avec l’ajout d’éléments du paysage
Le relief hachuré est terminé. Reste à ajouter des éléments de paysage pour rendre la carte plus attractive.
En principe vous devez disposer d’autres couches permettant d’ajouter les cours d’eau, etc. Si ce n’est pas le cas, il y a la possibilité d’ajouter rapidement des éléments à partir d’OpenStreetMaps.
Pour cela vous avez besoin du plugin QuickOSM. Installez le plugin si ce n’est pas déjà le cas.
Il est possible de télécharger tous les éléments OpenStreetMap dont nous avons besoin avec une seule grande requête. Mais dans ce cas tous les différents types d’éléments seront mélangés dans une seule couche et ceci rendra le travail de symbologie plus ardu.
Ici nous chargerons chaque type d’élément pas séparé pour simplifier la mise en place de la symbologie.
Ajout d’entités
Cliquez sur le bouton QuickOSM
La fenêtre de requête s’ouvre
Pour chaque type d’élément que vous souhaitez vous devez sélectionner une Cle et une Valeur. Les menus déroulants vous seront utiles pour retrouver les élément recherchés. Vous pouvez rentrer plusieurs couples Clés/Valeur en une seule requête en cliquant sur le signe + dans la colonne Ajouter. Dans ce cas pensez à modifier la première colonne en remplaçant le AND par défaut par OR.
Avant d’exécuter la requête vous devez définir l’étendue de téléchargement. Modifier la condition « Dans » par « Emprise d’une couche » et assurez vous que la couche utilisée soit la couche avec le hachurage.
Cliquez alors sur Exécuter la requête. Chaque requête, quand elle est exécutée, génère une couche virtuelle. Elle porte le nom de la première paire Clé/Valeur de la requête.
Par exemple, voici le résultat pour obtenir les zones forestières (Clé=natural, Valeur= forest).
Si vous voulez garder cette information (les couches virtuelles sont perdues à la fermeture de QGis), vous devez Enregistrer la couche dans un fichier permanent (par exemple le gpkg du MNT).
Vous pouvez alors définir la symbologie souhaitée pour la couche et l’enregistrer comme symbologie par défaut dans le fichier gpkg.
Par exemple, si on défini une couleur noire pour les forêts avec une transparence de 20% nous aurons le rendu suivant:
Pour garder cette symbologie par défaut, ouvrez la fenêtre de propriétés de la couche -> symbologie, cliquez sur le bouton Style->Enregistrer par défaut
Puis cliquez sur le bouton « Base de données source pour qu’il soit enregistré dans le fichier gpkg.
En plus des forêts, nous allons ajouter, en suivant les mêmes étapes:
Les cours d’eau avec deux paires Clé/valeur:
waterway/river et
waterway/stream
Nous appliquerons un symbole en ligne trait-pointillé noir avec une transparence de 60%
Les lacs et étangs avec la paire Clé/valeur
natural/water
auxquels nous appliquerons un symbole noir avec une opacité de 60%
Les routes avec deux paires Clé/Valeur
highway/primary et
highway/trunk
auxquels nous appliquerons un symbole de ligne noire avec une épaisseur de 0.75
Les zones rocheuses à nu avec deux paires de Cle/valeur
natural/bare_rock et
natural/scree
Auxquelles nous affecterons un symbole SVG de roches éparses
Pour finir nous allons ajouter des points de toponymie: villages et pics remarquables avec les Clé/valeur natural/peak et place/village
Et nous avons notre résultat final
Et voici une vue zoompée de cette carte finale :