6 points par GN⁺ 2023-10-24 | 2 commentaires | Partager sur WhatsApp
  • Offre une alternative en fichier statique unique auto-hébergé aux équipes pour qui l’exploitation de serveurs et les coûts des API cartographiques pèsent sur le déploiement de cartes web
  • Les développeurs frontend peuvent diffuser des tuiles de cartes vectorielles de façon simple et économique avec du stockage cloud et de simples HTTP range requests
  • PMTiles est un format ouvert qui contient des fonds de carte raster et vectoriels ainsi que des couches personnalisées, avec prise en charge du plugin MapLibre, de la CLI et de l’intégration CDN
  • Protomaps maintient des tilesets de fond de carte basés sur OpenStreetMap et d’autres données ouvertes, afin de faciliter l’adoption d’OSM dans les cartes web interactives
  • L’usage non commercial est gratuit, tandis qu’un usage commercial ou le besoin d’une API managée de tuiles de fond de carte nécessite de devenir GitHub Sponsor

Cartes auto-hébergées dans un fichier unique

  • Protomaps est une carte gratuite et personnalisable qui permet de distribuer une carte mondiale complète sous la forme d’un unique fichier statique
  • Elle peut être utilisée via un stockage cloud, et toute personne ayant de l’expérience avec S3 peut publier une carte interactive à l’échelle de la planète
  • Elle est conçue pour permettre aux développeurs frontend d’auto-héberger des cartes sans configuration de serveur séparée
  • Les tuiles de cartes vectorielles sont servies de manière simple et économique via les HTTP range requests
  • Pour démarrer, des ressources sont proposées : Get Started et le quick start tutorial

PMTiles et la façon de composer une carte

Fonds de carte basés sur OpenStreetMap

  • Protomaps maintient des tilesets de fond de carte créés à partir d’OpenStreetMap et d’autres sources de données ouvertes
    • Cela peut servir de voie simple pour adopter OSM dans des cartes web interactives
    • Il est possible de télécharger gratuitement le fichier planet complet ou d’extraire uniquement la zone souhaitée via la CLI
    • L’extraction d’une zone peut être lancée depuis Download your area
  • Les utilisateurs qui ne souhaitent pas gérer directement de gros fichiers peuvent utiliser une API de tuiles de fond de carte basée sur le cache CDN
    • L’usage non commercial est gratuit
    • L’usage commercial nécessite d’être GitHub Sponsor
    • La Maps API peut être utilisée dans le code

Cas d’usage

  • Les entreprises peuvent utiliser leur stockage cloud existant pour obtenir un contrôle full stack sur l’intégration de cartes dans leurs sites et réduire des coûts cartographiques mensuels de plusieurs centaines de dollars à quelques centimes
  • Les rédactions peuvent créer des récits interactifs avec des cartes personnalisées durables, sans dépendre d’API tierces
  • Dans le domaine scientifique, PMTiles permet de visualiser des données climatiques et environnementales à l’échelle de la planète, puis de créer des explorateurs de données avec des outils open source et des frontends cartographiques
  • Les administrations peuvent réduire leur dépendance aux Big Tech tout en préservant la vie privée des citoyens et la conformité au RGPD, et utiliser une alternative gratuite aux SIG propriétaires

2 commentaires

 
GN⁺ 2023-10-24
Commentaires sur Hacker News
  • J’ai essayé de créer une carte découpée uniquement autour de Half Moon Bay, au sud de San Francisco, avec l’outil pmtiles de Protomaps
    J’ai récupéré le binaire Go macOS le plus récent sur https://github.com/protomaps/go-pmtiles/releases, et trouvé la boîte englobante approximative via http://bboxfinder.com/#37.373977,-122.593346,37.570977,-122....
    La commande exécutée était pmtiles extract https://build.protomaps.com/20231023.pmtiles hmb.pmtiles \ --bbox=-122.593346,37.373977,-122.400055,37.570977, et en glissant le fichier hmb.pmtiles de 2 Mo obtenu dans la « drop zone » de https://maps.protomaps.com/, j’ai obtenu une carte détaillée avec les métadonnées OpenStreetMap et un niveau de zoom allant jusqu’aux contours des bâtiments
    C’est vraiment impressionnant pour seulement 2 Mo, et le fichier est ici : https://gist.githubusercontent.com/simonw/3c1a5358ca8f782f13...

    • J’en ai fait une démo https://simonw.github.io/hmb-map/ et un billet de blog https://til.simonwillison.net/gis/pmtiles
    • Vraiment génial. Ça pourrait être utile pour les commerçants locaux
      On embarque généralement Google Maps, mais il suffit souvent d’avoir une carte du quartier, et cela pourrait coûter moins cher
    • J’ai créé une carte de Gran Canaria de la même manière, et elle faisait 15 Mo
      Comme l’utilisateur n’a jamais besoin de télécharger le fichier entier, c’est assez génial, et j’ai hâte d’essayer d’intégrer des cartes dans un site statique
    • Ce n’est pas une question de support technique, mais je ne sais pas pourquoi ça ne marche pas chez moi
      Le fichier pmtile lié fonctionne, mais le fichier plus petit que j’ai créé ne fonctionne pas. Cela dit, le concept même d’obtenir une carte pour un projet est excellent
  • J’utilise Mapbox avec assiduité depuis que j’ai obtenu un accès alpha à Tilemill, et de mon point de vue, c’est la contribution la plus importante au domaine de la cartographie open source depuis les vector tiles et Mapbox GL / Map GL
    Mapbox a bien ouvert la voie avec son approche de cuisson des tuiles via MTS, mais c’était puissant, trop complexe et cher. On pouvait générer des tuiles avec Tippecanoe, mais l’hébergement des vector tiles restait un casse-tête ; avec PMTiles, l’hébergement des vector tiles peut être plus simple, plus pratique et coûter plus d’un ordre de grandeur de moins que chez Mapbox
    C’est particulièrement vrai si vous n’avez pas besoin de projections sophistiquées ou de support 3D et que MapLibre suffit. Felt semble aussi être l’un des principaux services à utiliser cette approche PMTile en interne, et c’est excellent de les voir continuer à investir dans Tippecanoe. Alors que Mapbox semble déplacer son attention vers la navigation automobile, c’est réjouissant de voir une innovation de rupture venir d’ailleurs, et plus étonnant encore, d’une équipe d’une seule personne
    L’arrivée de PMTiles, combinée au support des requêtes spatiales dans DuckDB, semble pouvoir ouvrir beaucoup d’innovations. Si l’on peut interroger et traiter de gros fichiers GeoParquet puis les diffuser rapidement sous forme de PMTiles générés à la volée, cela ouvre des cas d’usage très puissants

  • Je suis une communauté en ligne de développeurs-journalistes, et certains y voient PMTiles comme un moyen de réduire les coûts en hébergeant eux-mêmes des tuiles cartographiques avec style personnalisé
    Par exemple, cela vaut le coup de lire « How The Post is replacing Mapbox with open source solutions » https://www.kschaul.com/post/2023/02/16/how-the-post-is-repl...

    • Comment les médias savent-ils que ces données sont exactes ?
    • Ça a l’air d’être une communauté intéressante. Tu peux dire laquelle ?
  • Pour ceux que ça intéresse, le fichier PMTile d’exemple dérivé d’OSM, protomaps-basemap-opensource-20230408.pmtiles, fait 103 Go
    https://docs.protomaps.com/basemaps/downloads

    • C’est maintenant 107 Go
      Ce serait bien de pouvoir télécharger et appliquer uniquement les changements sur les fichiers quotidiens, hebdomadaires ou mensuels
    • C’est exactement le genre de chose qui se prête parfaitement à un téléchargement via Bittorrent
    • Qu’utilisent-ils pour la compression des tuiles ? Peut-on faire plus petit avec AVIF ? Ou bien AVIF + un overlay SVG pour le texte ?
    • C’est précisément ce que je voulais savoir. On peut considérer que c’est une taille assez raisonnable
  • Le point intéressant, c’est que « l’API Google Maps offre une tranche gratuite généreuse, mais les tarifs deviennent élevés au-delà de 30 000 chargements de carte. Protomaps a été conçu dès le départ comme un système auto-opéré, avec un backend 100 % statique reposant sur du cloud storage, donc il ne faut payer que le stockage et le transfert. Pour un usage intermédiaire, cela peut se chiffrer à quelques centimes »
    J’aimerais voir la configuration d’hébergement recommandée, une comparaison des coûts avec Google Maps, ainsi que le point où les courbes de coût se croisent

    • Je ne l’ai pas trouvé dans la FAQ, mais il serait intéressant de connaître l’ordre de grandeur des fichiers PMTiles pour un pays de taille moyenne
      Si l’on n’a pas besoin d’une mise à jour à 100 % en permanence et qu’il s’agit d’une carte utilisée seulement dans une région donnée, cela semble vraiment très attractif pour un auto-hébergement. Recompiler le fichier une fois par an puis le publier sur un hébergement de fichiers statiques paraît être une procédure simple, avec très peu de dépendances externes
      Modification : j’ai trouvé le lien officiel de téléchargement mondial[1], et cela dépasse légèrement 100GB. Donc la réponse à ma question serait sans doute « de quelques centaines de MB à quelques GB », ce qui me semble tout à fait raisonnable
      [1] https://docs.protomaps.com/basemaps/downloads
    • Chez Cloudflare, héberger 100GB coûte $1, et 10 millions de requêtes coûtent $0.36
      En lisant la documentation de Protomaps, ils expliquent comment mettre en cache les requêtes sur le CDN de Cloudflare, ce qui signifie qu’il ne faut payer le coût de chaque requête de tuile qu’une seule fois par durée de cache. C’est plutôt bon marché
      Un ancien titre de soumission Protomaps était « Serverless maps at 1/700 the cost of Google Maps API »
  • Brandon, le fondateur de Protomaps, est passé dans le podcast Geomob il y a quelques mois : https://thegeomob.com/podcast/episode-176

  • La partie la plus intéressante pour moi, c’est PMTiles
    « PMTiles est un format d’archive en fichier unique pour une pyramide de données de tuiles. Une archive PMTiles peut être hébergée sur une plateforme de stockage comme S3, et permet des applications cartographiques peu coûteuses et sans maintenance »
    « PMTiles est un format générique pour des données de tuiles adressées par coordonnées Z/X/Y. Il peut contenir différents types de données, comme des tuiles vectorielles de fond de carte, des observations de télédétection ou des images JPEG »
    « Un lecteur PMTiles utilise des requêtes de plage HTTP pour récupérer à la demande uniquement les tuiles ou métadonnées nécessaires à l’intérieur de l’archive PMTiles »
    « L’agencement des tuiles et des répertoires est conçu pour minimiser le nombre de requêtes supplémentaires lors des déplacements et des zooms »
    https://docs.protomaps.com/pmtiles/

    • PMTiles est formidable. Je l’ai découvert cet été en créant une carte des hotspots d’incendies de forêt au Canada
      Je recevais chaque jour un fichier CSV, le convertissais en tuiles vectorielles, le synchronisais avec S3, puis l’affichais sur une carte mapbox-gl, et le coût principal venait des opérations sur fichiers S3. Pour réduire les coûts, j’ai fortement regroupé les données et ramené le nombre de tuiles à environ 75 000, mais au rythme de mise à jour voulu, les seules opérations S3 me coûtaient $500 par mois
      Maintenant, je traite les fichiers en un seul fichier PMTiles et je ne déploie plus que ce fichier unique, ce qui a fait tomber les coûts à quelques centimes
      Cela ouvre énormément de possibilités pour créer des cartes publiques, et si cela vous intéresse, vous pouvez voir ici l’ensemble des données de hotspots du Canada pour 2023 : https://lens.pathandfocus.com
    • PMTiles est l’équivalent vectoriel du Cloud Optimized GeoTIFF (COG), qui permet à un client d’exploiter efficacement les informations cartographiques quand le serveur prend en charge les requêtes de plage HTTP
      Avant, côté vectoriel, on avait soit énormément de petits fichiers, soit de gros fichiers nécessitant un frontend pour servir les tuiles individuellement
      Désormais, sur du matériel solide, on peut convertir un dump OSM en fond de carte national en quelques minutes, et même à l’échelle d’un continent en quelques heures, puis l’auto-héberger sur un serveur web classique avec une feuille de style personnalisée
    • Peut-on aussi utiliser PMTiles non pas au sens strict pour des « tuiles cartographiques », mais comme moyen d’emballer puis d’héberger rapidement et simplement d’autres données géospatiales ? Par exemple une base de données de POI assez volumineuse mais peu souvent mise à jour
    • Si ce sont des fichiers vectoriels, cela veut-il dire qu’on peut faire du styling à la volée ?
  • La combinaison de Maplibre[1] + PMTiles + tippecanoe de Felt[2] est excellente pour des cartes web auto-hébergées, si le fait d’être limité à la projection Web Mercator ne vous dérange pas trop
    Presque toutes les sources géospatiales peuvent être converties en .pmtiles avec GDAL[3] et tippecanoe : (.shp .gpkg ...) | ogr2ogr -> .geojson | tippecanoe -> .pmtiles
    Pour les données OpenStreetMap, il y a planetiler[4], ainsi que des styles openmaptiles[5] utilisables avec Maplibre
    Avec cet ensemble, on dispose d’un bon point de départ pour un pipeline de données open source pouvant être hébergé sur AWS S3+CloudFront ou Cloudflare R2 pour quelques centimes
    [1] https://maplibre.org/
    [2] https://github.com/felt/tippecanoe
    [3] https://gdal.org/
    [4] https://github.com/onthegomap/planetiler
    [5] https://openmaptiles.org/styles/
    Cela dit, je trouve la documentation de GDAL/ogr2ogr assez difficile à lire, donc comme exemple de départ on peut regarder une commande comme celle-ci
    ogr2ogr -f GeoJSON counties.json -t_srs EPSG:4326 -nln counties -sql "SELECT STATEFP, COUNTYFP, NAME FROM tl_2022_us_county" /vsizip/tl_2022_us_county.zip
    https://census.gov/geographies/mapping-files/…

    • Je suis étudiant et j’essaie de développer mes compétences en géospatial/informatique ; quel type de projet pourrais-je construire avec ça ? Vous auriez un bon point de départ à recommander ?
  • J’ai déjà contribué à ce projet et on l’utilise aussi en production dans mon entreprise
    C’est vraiment excellent, et Brandon est très sympa ; je lui suis reconnaissant pour tout le travail accompli jusqu’ici

  • J’ai obtenu de très bons résultats pour le déploiement de cartes serverless avec PMTiles
    Si vous vous intéressez à un déploiement sur AWS CloudFront/Lambda@Edge/S3, vous pouvez regarder https://github.com/serverlessmaps/serverlessmaps