OpenArdenneMap – version été 2021

Depuis fin 2019, le style cartographique OpenArdenneMap est mis à jour suivant un cycle de livraison! OpenArdenneMap est un style cartographique open-source pour des cartes topographiques sur base des données OpenStreetMap. La livraison “été 2021” vient de sortir. Voici les principaux changements de cette dernière version.

Les changements sont listés dans le fichier CHANGELOG. Parmi ceux de cette version il y a quelques réglages de bugs (pour les labels courbes des plans d’eau), une meilleure distinction entre les types de routes primaire et secondaires, une amélioration des règles de labels des zones forestières en fonction de leur surface et d’autres améliorations mineures.

Pour les labels des zones forestières, une approche simple a été mise en place. La taille du label est fonction de la surface de la zone, mais seulement pour les forêts plus grandes que 500 ha. Pour les forêts plus petites, la taille ne dépend pas de la surface, avec 2 tailles différentes de labels (respectivement pour les forêts inférieures et supérieures à 50 ha).

Une nouvelle fonctionnalité, qui n’est pas une amélioration du style proprement dit, est de pouvoir décomposer les sorties cartographiques en labels et en le reste de la carte, afin de pouvoir déplacer à la main certains labels. Pourquoi séparer les labels du reste? Simplement parce que les fichiers vectoriels des cartes (SVG) sont si lourds qu’il est difficile de les éditer dans un logiciel de dessin vectoriel comme Inkscape, alors qu’une couche de labels peut être plus facilement éditée (notamment, les objets peuvent être dégroupés). Cette possibilité permet de déplacer les labels de la carte à la main. Malgré les règles avancées de Mapnik pour la disposition des labels, un placement manuel des labels reste nécessaire en bien des situations.

Cette fonctionnalité est utilisée pour la conception des cartes hiking-osm-be, un nouveau service de cartes de randonnées à imprimer, mettant en évidence les itinéraires balisés officiels. Cette offre de cartes est mise en œuvre par Champs-Libres et l’atelier cartographique avec le soutien d’OpenStreetMap Belgique. A ce jour, une quinzaine de cartes au format A3 à l’échelle 1:20000 ont été produites en Belgique et ce catalogue est amené à s’étoffer à l’avenir. Pour obtenir ces cartes et en commander de nouvelles, rendez-vous sur hiking.osm.be!

Une carte de la Semois

Un article pour présenter une carte de la Semois au 1/42,000 imprimée sur un support 200 x 70 cm: quelques aspects de cartographie et des éléments de la recette pour effectuer une rotation aux données géographiques avant leur mise en forme cartographique.

Une photo de la carte Semoy·ois imprimée

Dernier projet perso: une carte de la Semois grand format, à une échelle 1:42,000, ce qui donne une carte imprimée sur un grand rectangle de 2 mètres de haut sur 70 cm de large. Avec les données d’OpenStreetMap bien sûr, complétées par les bâtiments du PICC en Wallonie et puis une représentation du relief faite en combinant des données de relief de Wallonie, du GD de Luxembourg et européenne.

Bouillon: la carte n’est pas orientée au Nord (photographie de la carte imprimée)

La carte montre la Semois de sa source à son embouchure, selon l’orientation générale de la rivière, donc en orientant la carte selon un angle particulier. Prenant sa source en Lorraine, la rivière attaque curieusement de biais le massif ardennais qu’elle finit par percer pour retrouver la Meuse. Cette belle rivière trace son chemin avec de nombreux méandres mais en maintenant un cap relativement rectiligne. Sur l’emprise de la carte, des portions de 3 pays: Belgique, France, Luxembourg.

On passe de la Belgique (où la rivière prend le nom de Semois) à la France (et devient Semoy), sans passage de frontière dans le style cartographique (photographie de la carte imprimée)

Cartographie

Aperçu de la carte à Cugnon

Le style de la carte est celui d’OpenArdenneMap, mon projet de style pour des cartes topographiques à grande échelle. OpenArdenneMap est un style spécifiquement développé pour des cartes imprimées, avec un faible nombre de couleurs différentes, des contrastes clairs, et qui fait la part belle aux labels (basés sur la fonte Alfphabet), dans la tradition des cartes topographiques de l’IGN belge des années 1960 à 1980. Parmi les dernières nouveautés du style, il y a l’écriture en courbe de certains labels de plans d’eau. Pour cette carte, la Semois est soulignée par un trait bleu plus prononcé que ses affluents ou que les autres rivières apparaissant sur la carte. Enfin, le relief est représenté par un ombrage (hillshade) se superposant à la carte.

… à Jamoigne

Ici, avec une échelle de 1:42,000, on atteint les limites du style cartographique, plutôt défini pour du 1:20,000. En outre, l’absence de généralisation des données géographiques (par exemple, pas de déplacements des lignes trop proches) peut poser problème à certains endroits. La carte est générée automatiquement: elle n’a pas été retravaillée manuellement. Pour un meilleur rendu, il faudrait éventuellement déplacer des labels à la main, supprimer des superpositions d’éléments, …

Impression & collage

Après la mise en page du fichier, le fichier prêt à imprimer était un PDF rasterisé à 500 dpi. L’impression a été faite en qualité optimale sur du papier épais (120g/m² ou 160g/m²).

Puis la carte a été collée sur un support fait d’une planche de panneau MDF de 5 mm peint en noir. Pour le collage, j’ai utilisé une colle vinylique étalée en une fine couche avec un petit rouleau à peindre. Grâce à l’épaisseur du papier, le papier n’a pas trop gondolé (juste un peu), mais j’ai bien passé une heure à coller et à presser.

Le fichier source de cette carte est disponible en téléchargement libre sous licence Common Creative CC-BY-SA ici.

Préparation des données

Pour faire tenir le cours de la Semois dans un rectangle, la carte n’est pas orientée vers le Nord. Mapnik (i.e., le programme qui a généré la carte avec le style OpenArdenneMap) n’est pas capable d’effectuer une rotation de la carte selon une autre orientation que le Nord. Dès lors qu’on veut faire une carte avec une orientation non-conventionnelle, on peut soit effectuer une rotation de chaque label et symboles, ou simplement effectuer une rotation de toutes les données au préalable. C’est cette dernière option que j’ai choisie.

Rotation des données OpenStreetMap

Les données OpenStreetMap sont importées à l’aide du programme osm2pgsql dans une base de données avec PostGIS. On peut facilement effectuer une rotation de toutes les données avec la fonction ST_Rotate en indiquant un angle (en radian) et un centre (ici, en coordonnées EPSG:3857). Il faut donc précalculer cet angle et le centre de la carte. Par exemple, pour la table planet_osm_line:

CREATE TABLE planet_osm_line_semoy AS
SELECT *, ST_ROTATE(way, -1.3249, 587488, 6406205) AS rotated_way FROM planet_osm_line;

Rotation du relief (hillshade)

Pour l’effet d’ombrage du relief, l’approche a été d’effectuer une rotation du modèle numérique de terrain (MNT, aka DEM) avant de calculer l’ombrage.

1) D’abord, fusionner les MNT de Belgique, du GD Lux et de France:

gdal_merge.py -of GTiff -co BIGTIFF=YES -co TILED=YES -o dem_semoy.tif eudem_semoy_31370.tif dem_be_semoy_31370.tif dem_lux_semoy_31370.tif

2) Obtenir le fichier tfw du fichier tif pour faire une rotation “à la main”

gdal_translate -of GTiff -co profile=baseline -co tfw=yes dem_semoy.tif dem_semoy_baseline.tif

3) Modifier le fichier tfw

En transformant les valeurs du fichier tfw d’un raster au format GeoTiff, on peut lui appliquer une rotation (voir ce lien). Soit les valeurs A, B, C, D, E et F du fichier tfw, on applique une rotation d’un angle alpha (radians) en transformant ces valeurs comme suit:

(A')=A*cos(alpha)
(B')=A*sin(alpha)
(C')=-D*sin(alpha)
(D')=D*cos(alpha)
(E')=E
(F')=F 

4) Reprojection
Appliquer une reprojection avec gdalwarp vers une résolution plus basse pour gommer les artefacts de la rotation et le mettre dans un autre système de coordonnées.

gdalwarp -t_srs EPSG:3857 -r cubicspline -tr 25 25 dem_semoy_31370_clipped_baseline_rotated.tif dem_semoy_3857_clipped_rotated_warp_cubicspline_25x25.tif


5) Créer l’ombrage de relief (hillshade)

gdaldem hillshade dem_semoy_3857_clipped_rotated_warp_cubicspline_25x25.tif hillshade_dem_semoy_3857_rotated_warp.tif -co BIGTIFF=YES -co TILED=YES -co COMPRESS=DEFLATE -of GTiff -z 1.0 -s 0.5 -multidirectional


6) Appliquer une palette de couleur au raster hillshade

gdaldem color-relief hillshade_dem_semoy_3857_rotated_warp.tif -alpha shade.ramp hillshade_dem_semoy_3857_rotated_warp_semi_transparent.tif 


shade.ramp est un fichier de reclassification des valeurs des pixels du raster comme suit:

0 0 0 0 0
1 0 0 0 220
64 0 0 0 192
128 0 0 0 140
150 0 0 0 96
168 0 0 0 0
190 255 255 255 0
220 255 255 255 96
255 255 255 255 128

OpenArdenneMap à différentes échelles

Depuis fin 2019, le style cartographique OpenArdenneMap est mis à jour suivant un cycle de livraison! OpenArdenneMap est un style cartographique open-source pour des cartes topographiques sur base des données OpenStreetMap. La version 0.3.0 “scaling” vient de sortir. Cette version définit le style pour des niveaux de zooms de 10 à 20 alors que précédemment, le style était optimisé pour un niveau de zoom de 16.

Originellement, OpenArdenneMap a été adapté du style OSMBright qui est défini pour plusieurs niveaux de zooms. Mais le support pour ces différents niveaux de zoom avait été supprimé car le style se concentrait sur le niveau de zoom 16, pour correspondre à une échelle cartographique de 1:20000-1:25000. OpenArdenneMap est un style créé pour des cartes topographiques destinées à l’impression sur du papier. Dans Mapnik, le niveau de zoom définit une certaine échelle pour une résolution d’impression donnée. Un niveau de zoom n’est donc pas relié à une classe d’échelles de manière univoque mais il le devient lorsqu’on fixe une résolution d’impression: dans le style OpenArdenneMap, la résolution d’impression proposée (dans makeMap.py) est de 4600 pixels en largeur pour une page au format A4, soit un peu moins de 600 dpi.

Auparavant donc, le style OpenArdenneMap était adapté pour le niveau de zoom 16 mais était acceptable dans une gamme de zoom de 14 à 18. En-deça, les éléments se superposaient les uns au autres et la carte était illisible. Au-delà, certains symboles ou lignes apparaissaient trop grands. Avec cette nouvelle version, on peut sortir des cartes à des échelles plus petites (zoom < 14) voire des plans à grande échelle (zoom > 18). Néanmoins, le style reste destiné prioritairement à des niveaux de zoom entre 14 et 17 (échelles entre 1:100,000 et 1:10,000), et les développements à l’avenir continueront de se focaliser sur ces niveaux de zooms/échelles.

Voici une animation faite avec l’ancien style, passant du zoom 11 au zoom 18:

Et voici la même animation avec le nouveau style:

La conséquence est que OpenArdenneMap peut maintenant être utilisé dans un serveur de tuiles pour une carte web dynamique! Un projet que j’espère implémenter prochainement.

OpenArdenneMap – version hiver 2019-2020

Depuis fin 2019, le style cartographique OpenArdenneMap est mis à jour suivant un cycle de livraison! OpenArdenneMap est un style cartographique open-source pour des cartes topographiques sur base des données OpenStreetMap. La livraison “hiver 2019-2020” vient de sortir. Voici les principaux changements de cette dernière version.

Les changements sont listés dans le fichier CHANGELOG. Parmi ceux de cette version “hiver 2019-2020”, il y a un meilleur calcul de l’orientation de batiments, l’orientation et la courbature automatique des noms des plans d’eau, l’ajout d’abréviations et un style précis pour classifier les chemins et sentiers. Une version récente de PostGIS est nécessaire pour ce style.

Orientation de batiments

Orientation automatique du symbole des églises

Précédemment, une méthode empirique était utilisée pour orienter les églises en fonction de leur forme (voir cet article). Maintenant, une nouvelle fonction de PostGIS (ST_OrientedEnvelope) permet de le faire de manière plus exacte. Reste que si cette méthode permet bien de trouver l’axe médian principal d’un batiment (par exemple une église), elle ne permet pas de trouver le sens de cet axe (à savoir indiquer où se trouve le clocher de l’église).

Noms des plans d’eau

Courbure des noms des plans d’eau sur OpenArdenneMap

Les noms des grands plans d’eau sont à présent positionnés au centre du plan d’eau et suivent sa courbure, de manière complètement automatique. Cela est possible avec une nouvelle fonction de PostGIS (ST_ApproximateMedialAxis) qui transforme un polygone en une ligne médiane. Il suffit ensuite d’attacher le nom du plan d’eau à cette ligne médiane.

Des abréviations en exposants

Utilisation d’exposants dans les noms des cours d’eau

Mapnik ne permet pas d’écrire en exposant ou en indice. Une astuce est d’utiliser des symboles Unicode pour transformer une partie du texte en exposants ou indices. Mais cette méthode a ses limites: toutes les fontes
n’ont pas de symboles définis pour ces exposants et indices et Mapnik affiche une fonte de secours en cas d’absence de la glyphe dans la fonte voulue. Encore à améliorer dans les futures livraisons …

Une meilleure classification des chemins et sentiers

Exemple de chemins classifiés selon différent tracktype et le tag trail_visibility

Il y a de la richesse dans les données OpenStreetMap à propos des chemins et sentiers. Par exemple, le type de revêtement (surface=*) et la visibilité du sentier (trail_visibility=*). Pour les chemins (highway=track), il y a aussi une classification des chemins (tracktype=grade1 -> grade5) en fonction de leur importance et practibilité. OpenArdenneMap tente de rendre ces informations visibles en stylant les chemins selon le track_type et le trail_visibility. Un des buts de ce rendu est d’informer le lecteur de la carte que certains chemins ou sentiers pourraient être difficile à trouver sur le terrain (tracktype=grade5 ou trail_visibility=bad ou horrible).

Sur l’image ci-dessus, les 5 classes de tracktype sont affichés et indiqués avec une flèche. Quand au tag trail_visibility, il impacte le sentier ou le chemin en rendant son tracé interrompu.

Prochaine livraison cet été!