Dans l'article précédent je vous ai montré comment il était possible d'héberger son propre serveur de carte, et donc de ne plus être dépendant de services externes pour afficher des cartes sur un site web. À un détail près, puisque même si on peut être autonome avec le serveur, il fallait quand même passer par un service payant pour pouvoir récupérer et mettre à jour les données cartographiques. Nous allons voir maintenant comment faire ça nous même.

Pourquoi les données cartographiques sont-elles payantes ?

On peut légitimement se poser cette question : puisque les données cartographiques viennent d'OpenStreetMap, leur usage est censé être libre - dans ce cas, pourquoi le téléchargement des données pour le serveur de tuile est-il payant ?

La réponse est toute simple : parce que les données OpenStreetMap ne peuvent pas être utilisées directement, et nécessitent donc une phase de conversion.

Il est tout à fait possible d'héberger une copie du site OpenStreetMap, avec son serveur de tuiles «images», et donc d'utiliser directement les données existantes. J'ai déjà mentionné le site Switch2OSM si le sujet vous intéresse.

Mais le rendu de ces tuiles images se fait vieillot, et je préfère proposer un affichage vectoriel, qui n'a que des avantages, maintenant que c'est supporté correctement sur tous les appareils un peu récents : format plus léger, zooms et déplacements plus fluides.

Nous allons donc voir comment effectuer la conversion des données natives OpenStreetMap vers un format vectoriel.

Le format OpenMapTiles

Les équipes de MapTiler, le service qui propose de télécharger les données cartographiques, sont à l'origine du format de tuiles verctorielles OpenMapTiles, distribué sous licence libre et gratuit à utiliser.
C'est ce format que j'ai utilisé dans mes articles précédent lorsque je parlais de tuiles vectorielles.

Étant donné que le format est libre, nous avons donc pu avoir différentes initiatives pour proposer des serveurs compatibles, ainsi que des projets pour convertir les données OpenStreetMap vers ce format. Nous pouvons citer en vrac (liste non exhaustive) : Openmaptiles-tools, Tilerator, Tilemaker, ou Planetiler

C'est ce dernier projet que j'ai décidé d'utiliser et que je vais vous présenter

Génération d'un fichier mbtiles avec Planetiler

Après avoir essayé différents outils pour générer mes données cartographiques vectorielles, j'ai décidé d'utiliser Planetiler car il est le plus simple à utiliser : il suffit d'une ligne de commande pour obtenir un fichier de mbtiles, qu'il ne nous reste plus qu'à envoyer sur notre serveur.

Tout d'abord, il faut savoir quelle zone on veut convertir. Vous pouvez vous contenter d'une région ou d'un pays, mais si vous souhaitez la planète entière il vous faudra beaucoup de mémoire RAM, et quelques heures à attendre.

Les données par région sont fournies par le site Geofabrik, et seront téléchargées automatiquement par l'outil. De mon côté, je me contente de la carte de France (métropole + corse)

Pour lancer la conversion, 2 options.

Utilisation de l'outil Java :

wget https://github.com/onthegomap/planetiler/releases/latest/download/planetiler.jar
java -Xmx32g -jar planetiler.jar --download --area=france

Avec l'image Docker:

docker run -e JAVA_TOOL_OPTIONS="-Xmx32g" -v C:\data:/data ghcr.io/onthegomap/planetiler:latest --download --area=france

Ces lignes de commande viennent du REAMDE de l'outil, que j'ai très légèrement adaptées :

  • l'option Java -Xmx32g représente la mémoire utilisable par l'outil. Elle est limitée à 1Go dans leur exemple, suffisant pour la principauté de Monaco, mais limite pour la France
  • et j'ai remplacé la variable shell $(pwd) par un chemin en dur, car je le fait tourner sous Windows et que la syntaxe Powershell n'est pas exactement la même (j'avoue que je n'ai pas cherché comment l'écrire plus proprement)

Après trois quarts d'heure à mouliner sur mon PC, j'ai enfin obtenu ma carte, que j'ai pu mettre sur mon serveur de tuiles.

Si vous souhaitez convertir la planète entière, il vous faudra idéalement plus de 100Go de RAM, et de nombreux cœurs dans votre processeur. Vous pouvez lire une documentation spécifique dans laquelle je ne rentrerai pas en détail.
Personnellement, je n'ai même pas essayé de lancer ça sur mon PC, il faudra certainement préférer utiliser des machines virtuelles cloud pour ça. Pour exemple, la conversion complète de la planète a été effectuée en un peu plus de 3h sur une machine avec 16 cœurs et 128Go de ram.

Avec ce 3ème article, vous avez maintenant tout le nécessaire pour héberger vos cartes et les mettre à jour régulièrement, et j'espère vous avoir convaincu de le faire !