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...

image bitmap et image vectorielle, source : https://commons.wikimedia.org/wiki/File:Vector-raster-conversie.PNG
Différence entre une carte image bitmap et une carte vectorielle

Quand on déplace la carte, on ne charge que les tuiles qui sont manquantes pour la compléter.

Chargement progressif de tuiles
Chargement progressif de tuiles

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.

Étapes 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 :

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 :

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

Serveur de tuiles, vision globale

Vision globale des différentes alternatives possibles

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).

Pile OpenMapTiles

Les composants du projet (vert) et les parties annexes (dégradé)

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.

Kartotherian

Les composants du projet (orange) et les parties annexes (dégradé)

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.

ABONNEZ-VOUS À LA NEWSLETTER !
Voir aussi
Créer une carte avec Umap Créer une carte avec Umap 03/07/2019

[ Tuto ] créer une carte utilisant OpenStreetMap et y ajouter ou importer des données, puis ...

Retour sur le State of the Map France 2019 Retour sur le State of the Map France 2019 26/06/2019

Makina Corpus était une nouvelle fois sponsor de la conférence annuelle d'OpenStreetMap France et ...

Makina Corpus, conférence OpenStreetMap 2019 07/06/2019

Makina Corpus est cette année encore sponsor de la conférence State of the Map France qui se ...

Cartographie Web 3D - possibilités techniques en logiciels libres 08/01/2019

Au début, les cartes sur le web étaient planes. Puis, avec de plus en plus de données (imagerie ...

Retour State of the Map France 2018 Retour State of the Map France 2018 23/07/2018

L'équipe de Makina attendait avec impatience l'événement de l'année, State Of The Map 2018 à ...