Présentation du format PMTiles

PMTiles est un format de tuiles vectorielles qui se présente sous la forme d’un unique fichier ; il exploite les requêtes HTTP Range pour extraire uniquement les blocs de données correspondant aux niveaux de zoom et aux coordonnées demandés. Cette approche élimine le besoin d’un serveur de tuiles traditionnel, car le fichier peut être stocké dans n’importe quel bucket compatible S3 et servi directement par le CDN.

Lorsque le CDN ne supporte pas nativement les requêtes Range, une fonction d’arête (edge function) peut traduire les chemins classiques /z/x/y.pbf en requêtes Range vers le fichier PMTiles. Cette couche d’abstraction conserve la compatibilité avec les bibliothèques cartographiques existantes tout en conservant la portabilité du fichier unique.

Déploiement sur un CDN : l’exemple Bunny.net

Bunny.net accepte les requêtes Range et propose un modèle tarifaire basé sur le volume de stockage et la bande passante. Le stockage du fichier mondial de 139 Go, répliqué sur cinq continents (facteur de réplication = 5), coûte approximativement 5 $ par mois (0,01 $/Go/mois sans réplication, majoré à 0,055 $/Go/mois avec réplication maximale). La bande passante vers l’Europe ou l’Amérique du Nord est facturée à 0,01 $/GB, ce qui rend le transfert de 5 Mo – la charge typique d’une carte européenne affichée sur un ordinateur portable – équivalent à 0,00005 $.

En comparaison, Mapbox facture 0,05 $ pour 1 000 chargements de carte, soit un facteur d’économie d’environ 100 fois pour un usage similaire. Le coût réel dépend du taux de rebond et du nombre d’utilisateurs actifs, mais même un trafic soutenu reste largement inférieur aux tarifs des API commerciales.

Configuration du stockage et du pull zone

Le processus d’upload recommande la création d’une zone de stockage S3‑compatible, car l’API HTTP standard a échoué après 15 minutes de timeout. Avec rclone, il est possible de copier le fichier PMTiles directement depuis l’URL de construction vers le bucket Bunny :

rclone config create bunnycdn s3 \
  provider=Other \
  access_key_id="" \
  secret_access_key="" \
  endpoint="https://-s3.storage.bunnycdn.com"

rclone copyurl "" "bunnycdn:/.pmtiles" \
  --s3-chunk-size 256M \
  --progress

Une fois le fichier en place, la création d’une pull zone consiste à sélectionner la zone de stockage comme origine, activer le paramètre « Optimize for large object delivery » afin de permettre le caching des requêtes Range, et restreindre les origines CORS pour empêcher l’inclusion non autorisée de tuiles.

Pour limiter les factures, il est possible de plafonner la vitesse de téléchargement à 10 kB/s après 10 Mo transmis, ainsi que d’imposer un nombre maximal de requêtes par seconde ou un quota mensuel de bande passante. Ces réglages réduisent le risque d’abus tout en conservant une expérience fluide pour les utilisateurs légitimes.

Intégration côté client avec MapLibre GL

Après le déploiement, l’affichage des tuiles se fait via MapLibre GL, en installant le paquet npm pmtiles qui ajoute le protocole pmtiles:// au chargeur de styles. Le développeur doit déclarer le style JSON et le point d’accès du fichier PMTiles, puis initialiser la carte comme d’habitude. Cette chaîne d’outils permet de servir une carte mondiale haute disponibilité sans dépendre d’un service tiers payant.