Makina Blog
Tour d’horizon des serveurs de tuiles vectorielles pour fond de carte
Parcours des différentes étapes et composants de piles logicielles existantes pour la production de tuiles vectorielles.
Les cartes sur le web sont aujourd’hui composées de tuiles. Ce sont de petits morceaux de cartes, des carrés, mis les uns à suite des autres. Initialement ces tuiles étaient des images bitmaps, mais elles sont progressivement remplacées par des tuiles vectorielles. Les tuiles vectorielles contiennent les géométries qui composent la carte et non plus des dessins figés de celle-ci, ce qui apporte de nouvelles possibilités : modification du style à la volée, rendu 3D…
Quand on déplace la carte, on ne charge que les tuiles qui sont manquantes pour la compléter.
Au fur et à mesure que l’on zoome sur la carte on remplace les tuiles par les tuiles de niveau de zoom suivant.
Nous vous détaillons dans cet article les étapes pour produire votre fond de carte vectoriel.
Etapes pour la production d'un fond de carte vectoriel
Contexte
Il y a deux parties pour la représentation d’une carte :Le fond de plan et les données que l’on y superpose. On s’intéresse ici uniquement à la problématique du fond de carte construit depuis des données OpenStreetMap.
Les données OpenStreetMap sont diffusées dans un format de fichier dédié : .osm.pbf. C’est un format binaire simple, ce n’est pas un format de données géographique à proprement parler.
Importer OpenStreetMap en base de données
L’approche est d’utiliser un outil dédié à la lecture de ces .osm.pbf. Il en existe deux : osm2pgsql et imposm. Ils permettent de sélectionner les types d’objets que l’on souhaite importer et de recréer les géométries. Ils utilisent des fichiers de configuration listant les tags OpenStreetMap à conserver et les tables de base de données dans lesquels les importer.
La base de données utilisée est dans tous les cas PostgreSQL avec l’extension PostGIS pour la manipulation de données spatiales.
Toutefois il existe deux approches pour structurer ces données. La première est de stocker les objets par nature de géométrie. C’est l’approche d’osm2pgsql qui va typiquement créer les tables suivantes :
- planet_osm_line
- planet_osm_nodes
- planet_osm_point
- planet_osm_polygon
- planet_osm_roads
- planet_osm_ways
- …
L’autre approche est d’avoir des tables par nature d’objets, c’est plutôt l’approche d'imposm. On va alors se retrouver avec ce type de tables :
- boundary
- transportation
- place
- water
- …
Des données externes sont également utilisées. Elles sont chargées dans des tables et subissent des pré-traitements. Il s’agit de données s'affichant à des niveaux de zooms faibles, comme les polygones simplifiés des lignes de côtes, ou encore des villes apparaissant au fur et à mesure, selon leur importance.
Description des couches de la carte
Les cartes sont composées de couches de données qui sont rendues les unes au-dessus des autres. On commence par dessiner les océans, puis les terres émergées, les forêts, les champs… les cours d’eau, les routes… jusqu’à terminer par la voirie et le nommage des lieux.
Pour chaque couche de données il faut décrire ce qui est à récupérer depuis la base de données. Ces informations sont également dépendantes du niveau de zoom à dessiner. Par exemple les chemins ou les ruisseaux ne sont visibles qu’à partir d’un certain niveau de zoom.
Chaque couche de données est donc valable pour un intervalle de niveau de zoom et définit une requête de base de données en SQL.
Il existe un format de description de ces couches de données, également appelé source de données : le tm2source. Ce format est assez standard, mais n’est pas utilisé par tous les outils de génération de tuiles.
- Datasource: dbname: openmaptiles extent: [-20037508.34, -20037508.34, 20037508.34, 20037508.34] geometry_field: geometry host: postgres key_field: '' key_field_as_attribute: '' max_size: 512 password: openmaptiles port: 5432 srid: 900913 table: (SELECT geometry, class, subclass FROM layer_landcover(!bbox!, z(!scale_denominator!))) AS t type: postgis user: openmaptiles id: landcover properties: {buffer-size: 4} srs: +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over
Définition d'une couche dans un tm2source
C’est cette structure de données qui va se retrouver dans les tuiles vectorielles.
Schéma des tuiles vectorielles
Cette technologie a été popularisée par Mapbox. Cette entreprise américaine spécialisée dans la cartographie en ligne a développé les outils et format de tuiles vectorielles. Le format des tuiles (MVT) n’est qu’un conteneur. Il peut être utilisé pour des schémas de données différents.
Les tuiles vectorielles sont un format intermédiaire. Pour être utilisé comme fond de plan, le schéma de données qu’elles contiennent doit être générique, celui ci offrant alors de larges possibilités pour les styler de façons multiples.
Il existe plusieurs schémas de fond de plan concurrents. Le premier a fut celui de Mapbox. Ce n’est toutefois pas un schéma libre. Il n’est pas possible de produire des tuiles compatibles. Les styles de carte développés sur ce schéma sont donc contraints d’être utilisé avec les tuiles fournit par Mapbox.
En réponse à cette contrainte, un schéma libre de tuiles vectorielles a été défini. Il s'agit du projet OpenMapTiles.
TileJSON
Le schéma des tuiles produites est décrite par un fichier au format TileJSON. Il liste les couches et les attributs. Il permet également d’indiquer la zone géographique ainsi que les niveaux de zooms où les tuiles sont disponibles.
C’est un format de méta-informations standard fournit par la majorité des serveurs de tuiles. Il est utilisé notamment par les visualiseurs ou les éditeurs de styles de rendu vectoriel.
Produire des tuiles
Il y a deux étapes pour servir des tuiles vectorielles.
La première est d’exécuter les requêtes SQL pour obtenir les données, puis construire les fichiers binaires de tuiles vectorielles proprement dite.
La seconde est de les servir au travers d’un serveur web.
Il y a donc des outils qui ne font que la production des tuiles, d’autres qui ne font que le service web, et certain qui font les deux.
Pré-calcul ou calculer à la demande
La stratégie de production des tuiles n’est pas la même que pour la production des tuiles images.
Les tuiles de niveaux de zooms faibles utilisent de grandes quantités de données et peuvent représenter des pays entiers, voir le monde pour la tuile de niveau 0. Le temps de calcul de ces tuiles est important. Ces tuiles sont également les plus utilisées. Les données qu’elles contiennent changent peu ou pas. Il est donc pertinent de les pré-calculer et les stocker pour les servir plus tard.
Les tuiles de zoom élevées, pour les niveaux détaillés, contiennent comparativement peu de données. Elles sont donc rapides à calculer. Ces tuiles sont peu consultées et très nombreuses. Il est donc plus pertinent de les générer à la demande plutôt que de les préparer et de les stocker. Elles sont mises en cache pour pouvoir être éventuellement réutilisées (si les données qu’elles contiennent n’ont pas changées).
Cette stratégie est mixte. Elle est valable pour les tuiles images de tous les niveaux de zoom de (0 à 19 ou plus) qui sont rendu coté serveur.
À contrario, les tuiles vectorielles ne sont pas générées pour le même intervalle de zoom. Elles ne sont généralement produites que pour les niveaux de zoom 0 à 14. Pour les niveaux de zooms supérieur ce sont les mêmes tuiles qui sont utilisée en « overzoom ». C’est-à-dire que les tuiles de niveau 14 contiennent déjà tous les détails pour les niveaux de rendu des zooms suivants. Les tuiles vectorielles sont juste étirées. Par conséquent la stratégie la plus adaptée ici est uniquement de pré-calculer les tuiles pour tous les niveaux.
Production en masse
Les tuiles vectorielles peuvent être générées pour des zones restreintes, un département, un pays ou pour le monde entier. La génération des tuiles du zoom 0 à 14 pour le monde entier prend 14 h avec 30 serveurs.
Les outils permettant de générer de façon massive des tuiles vectorielles sont :
- postserver, du projet OpenMapTiles,
- tilerator, du projet Kartotherian,
- generate-vectortiles.
Stockage des tuiles
Les tuiles peuvent être stockées de différentes façon. La plus simple est de les stocker comme des fichiers. Mais il y a beaucoup de petits fichiers et leur utilisation est donc moins efficace que de gros fichiers.
Il est également possible de les archiver dans un fichier MBTiles. C’est en fait une base de données Sqlite, qui est le standard pour le stockage et la diffusion de jeux de tuiles. Un MBTiles du monde entier représente alors 66 Go.
Service de tuiles pré-construites
Ces jeux de tuiles peuvent ensuite être servis par des serveurs spécialisés.
On trouve pour cela les outils :
- TileServer GL, de l’écosystème du projet OpenMapTiles,
- kartotherian, du projet éponymie.
Services dynamiques de tuiles
Il existe toutefois plusieurs serveurs de tuiles dynamiques dont le périmètre d’utilisation est plus large que la production de tuiles vectorielles de fond de carte. Ils peuvent aussi servir de générateur de tuiles qui peuvent ensuite être stockées. On retrouve dans ces serveurs :
Autres serveurs dynamiques de tuiles
tilemaker est un serveur de tuiles sans prétraitement ni base de données. Il est fait pour traiter directement de petits extraits d’OpenStreetMap.
martin est un serveur de tuiles paramétrable. Il permet de faire en base de données des sélections depuis des paramètres passées dans les URL de requête des tuiles.
OpenMapTiles Map Server est un outil de MapTiler pour faire entre autres de la génération, du stockage et le service des tuiles. Mais contrairement à tous les autres cités ici, ce n’est pas un outil libre.
MapServer et GeoServer sont également capables de produire des tuiles vectorielles depuis toutes les sources de données qu’ils supportent.
Vision globale
Tilelive
Certain de ces générateurs ou serveurs de tuiles sont construits avec des composants de l’écosystème Tilelive. C’est un ensemble de bibliothèques pour la manipulation et la génération de tuiles images et vectorielles. Tilelive a été développé par Mapbox, mais n’est plus maintenu.
Piles de génération
Ces différentes étapes et composants de génération de tuiles sont agencés ou même produit dans le cadre de projet ayant pour but de les mettre bout à bout pour en faciliter l’usage.
OpenMapTiles
OpenMapTiles est une suite d’outils de production de tuiles vectorielles mais avant tout un schéma libre de tuiles.
OpenMapTiles est fait pour être utilisé tel quel ou comme base libre pour en dériver d’autres schémas. Il a servi de base aux tuiles vectorielles de Jawg Maps ou encore de Qwant Maps.
Des tuiles au schéma OpenMapTiles sont diffusées commercialement par MapTiler (qui sont les auteurs d’OpenMapTiles).
Kartotherian
Kartotherian est le nom d’un serveur de tuiles, mais aussi de la pile de production qui l’intègre. C’est un projet de la fondation Wikimédia. Il est utilisé pour les cartes disponibles sur Wikipédia.
Qwant Maps
La carte vectorielle de Qwant Maps est un dérivé du schéma OpenMapTiles mais servit avec Kartotherian.
Conclusion
Maintenant qu’un monde de possibilités s’offre à vous, il ne reste plus qu’à faire votre choix. Chez Makina Corpus nous conseillons OpenMapTiles pour faire des fonds de plan. Si vous avez d’autres besoins regardez du côté de T-Rex ou Tegola. Vous voulez en apprendre plus ? Participer à notre formation Tuiles vectorielles.
Formations associées
Formations SIG / Cartographie
Formation Tuiles vectorielles
À distance (FOAD) Du 3 au 4 juin 2025
Voir la formationActualités en lien
Mini-guide à l’usage des collectivités : l’Open Data, entre nécessité et opportunité
Tout ce que vous avez toujours voulu savoir sur l’Open Data. Petit guide à destination des collectivités pour l’appréhender et se l’approprier.
Une rentrée riche autour de la donnée et des rencontres pour Makina Corpus Territoires
Chaque rentrée apporte son lot d’opportunités pour faire avancer les projets autour de la données au service des territoires. Le calendrier de Makina Corpus en la matière a été particulièrement dense en événements.
Web mapping : comparaison des serveurs de tuiles vectorielles depuis Postgres / PostGIS
Un ensemble de serveurs de tuiles vectorielles basés sur la fonction ST_AsMVT() de PostGIS sont disponibles. Makina Corpus vous propose un tour d’horizon des spécificités des différentes solutions.