Dans le cadre du projet OpenArdenneMap (OAM), réalisé via l’environnement QGIS, à l’aide du moteur spatial PostGIS et ayant comme base les données récoltées sur OpenStreetMap (OSM), j’ai développé une série de traitements SQL qui permettent d’aboutir à une généralisation cartographique. Mon objectif n’était pas de créer de nouvelles données mais de retravailler l’affichage des couches existantes pour améliorer la lisibilité cartographique à toutes les échelles.

Cet article va donc détailler les différents processus et algorithmes qui ont été mis en place afin d’optimiser la représentation du territoire.

Unification par axe médian des réseaux de transport

Le premier travail a porté sur la structure des réseaux routiers et ferroviaires. Dans OSM, les voies telles que les autoroutes et les lignes de chemins de fers apparaissent comme deux entités distinctes (cf figure 1 et 3), bien que cela ne soit visible qu’à grande échelle. J’ai donc mis en place un algorithme de calcul d’axe médian (Approximate medial axis) qui se déroule en 3 étapes et qui fusionne les géométries parallèles en un seul tracé unique (cf figure 2 et 4). Le processus va suivre les 3 étapes suivantes :

  • A. Bufferisation : l’algorithme créera une zone tampon autour des voies parallèles pour les fusionner en un polygone.
  • B. Extraction de l’axe médian : Grâce à l’utilisation de fonctions SQL, la ligne centrale de ce polygone sera extraite.
  • C. Simplification : lors de cette étape, des fonctions sont utilisées pour simplifier et pour conserver la courbure naturelle du tracé.

Le résultat de cet algorithme d’unification des réseaux de transports est un tracé unique et homogène qui regroupe les 2 sens de circulation.

Unification par axe médian d’autoroutes

Unification par axe médian de voies ferrées

Simplification du bâti et des aires de parkings

Dans le cadre de la généralisation cartographique le deuxième travail que j’ai effectué est celui du traitement des objets surfaciques (que sont les bâtiments et les parkings dans ce cas précis).

Simplification des buildings

J’ai appliqué une fonction de clusterisation spatiale (ST_ClusterDBSCAN), celui-ci permet de fusionner les bâtiments très proches en un seul bloc urbain (cf figure 6). Il faut néanmoins préciser qu’afin de préserver la couche rotated buildings, les édifices tels que les églises ou encore les chapelles ont été retirées de ce processus de fusion automatique.

Simplification de bâtiments

Simplification des parkings

Les parkings dans OSM contiennent de temps en temps un réseau de routes de type « service » en son sein. Dans le cadre d’OAM, j’ai dû supprimer ce réseau de routes internes (cf figure 7). Pour se faire, à l’aide d’intersections et d’unions spatiales, j’ai réussi à intégrer les routes de type « services » au polygone « parking » (cf figure 8). Tout comme les buildings, il sera lui aussi simplifié pour obtenir des polygones plus épurés.

Simplification de parkings

Déplacement des réseaux routiers et snapping des ponts

Il est d’abord nécessaire de souligner qu’en cartographie, lorsque deux objets sont superposés, il y a une perte d’information. Par exemple, lorsqu’une route longe de trop près une rivière, la route sera soit écrasée par l’élément hydrographique soit superposé à ce dernier, ce qui bien évidemment entraine une perte d’informations qu’elle soit hydrographique ou routière.

Déplacement

Pour corriger ce problème, j’ai conçu un script de déplacement latéral. Cet algorithme permet d’identifier les zones de conflit, et il « repoussera » la géométrie de la route par rapport à celle de l’obstacle (chemins de fers ou cours d’eau dans ce cas-ci). Ce décalage qui sera plus visible à une grande échelle, permettra d’améliorer la lisibilité de la carte (cf figure 9 et 10). En effet, il permet de voir distinctement les deux objets côte à côte et non plus l’un sur l’autre.

Déplacement de chemins par rapport à un cours d’eau

Snapping

En parallèle, un travail de snapping a été effectué sur les ponts. En effet, les ponts étaient auparavant représentés par deux symboles distincts en fonction de leurs tailles (cf figure 11). Il arrivait aussi que deux symboles apparaissent sur un même segment, et ce pour deux raisons principales : soit car les deux segments n’étaient pas parfaitement collés, soit parce qu’il y avait un micro-espace entre eux. Désormais, tous les ponts sont représentés par un seul et même symbole et ce peu importe leurs tailles. Le principe de l’algorithme de snapping qui a été mis en place, est de coller les segments de ponts entre eux, ce qui permet d’éliminer les micro-espaces entres chacun des segments ou encore de les coller. Grâce à cette opération, chaque pont est représenté par un seul symbole ce qui aide à la lecture de la carte (cf figure 12).

Transformation d’un symbole de pont unique par un symbole de pont étiré en longueur

Clusterisation

Le dernier travail de généralisation demandé était une optimisation concernant la couche point_features. Le problème principal était la proximité entre centroïdes, ce qui jouait sur la lisibilité de la carte surtout à petite échelle. En effet, si deux centroïdes similaires (par exemple des tables de pic nic, (cf figure 13 et 14)) se retrouvent spatialement proche, deux symboles apparaitront et ce même si on est à petite échelle. Le système de clusterisation qui a été mis en place va permettre de regrouper les points proches possédant un tag similaire. L’algorithme (présent sur QGIS) va générer un symbole unique qui représente le groupe de centroïdes similaires qui se chevauchaient auparavant.

Clusterisation du symbole des tables de pic-nic