- Ofrece a los equipos para los que operar servidores y pagar costos de APIs de mapas en la publicación de mapas web resulta una carga, una alternativa de self-hosting con un único archivo estático
- Los desarrolladores frontend pueden servir tiles de mapas vectoriales de forma simple y económica usando solo almacenamiento en la nube y HTTP range requests
- PMTiles es un formato abierto que contiene basemaps ráster y vectoriales, y capas personalizadas; admite plugin de MapLibre, CLI e integración con CDN
- Protomaps mantiene tilesets de basemaps basados en OpenStreetMap y otros datos abiertos, para facilitar el uso de OSM en mapas web interactivos
- El uso no comercial es gratuito; si se necesita uso comercial o una API administrada de tiles de basemap, es necesario participar como GitHub Sponsor
Mapas con self-hosting en un solo archivo
- Protomaps es un mapa gratuito y personalizable que permite publicar el mapa del mundo como un único archivo estático
- Puede subirse a almacenamiento en la nube; si tienes experiencia usando S3, puedes publicar mapas interactivos a escala global
- Está diseñado para que los desarrolladores frontend hagan self-hosting de mapas sin configurar servidores adicionales
- Los tiles de mapas vectoriales se sirven de forma simple y económica usando HTTP range requests
- Ofrece materiales de inicio como Get Started y el quick start tutorial
PMTiles y cómo se componen los mapas
- Los ejemplos muestran una configuración mínima para crear un basemap y una superposición de datos solo con HTML + JS
- PMTiles es una especificación de archivo de pirámide de tiles en orden Hilbert y puede contener datos geoespaciales como basemaps ráster y vectoriales, y capas personalizadas
- Ofrece plugin de MapLibre, interfaz de línea de comandos e integraciones con CDN
- Los detalles del formato pueden consultarse en la documentación de PMTiles
Basemaps basados en OpenStreetMap
- Protomaps mantiene tilesets de basemaps creados con OpenStreetMap y otras fuentes de datos abiertos
- Puede usarse como una vía sencilla para adoptar OSM en mapas web interactivos
- Se puede descargar gratis el archivo planet completo o extraer solo la región deseada con la CLI
- Puedes iniciar la extracción de una región en Download your area
- Los usuarios que no quieran gestionar directamente archivos grandes pueden usar una API de tiles de basemap basada en caché de CDN
- El uso no comercial es gratuito
- El uso comercial requiere ser GitHub Sponsor
- Se puede usar la Maps API desde el código
Escenarios de uso
- Las empresas pueden usar su almacenamiento en la nube existente para obtener control full-stack sobre mapas embebidos en sitios, y reducir costos de mapas de cientos de dólares al mes a centavos
- Las redacciones pueden crear historias interactivas con mapas personalizados que sigan funcionando por mucho tiempo, sin depender de APIs de terceros
- En el ámbito científico, PMTiles permite visualizar datos climáticos y ambientales a escala global, y crear exploradores de datos con herramientas open source y frontends de mapas
- Las agencias gubernamentales pueden reducir la dependencia de Big Tech, preservar la privacidad ciudadana y el cumplimiento de GDPR, y usar una alternativa gratuita a los GIS propietarios
2 comentarios
Protomaps - Crea tu propio sistema de mapas con OpenStreetMap
Protomaps - Publica mapas serverless como código abierto
Comentarios de Hacker News
Probé crear un mapa recortado solo alrededor de Half Moon Bay, al sur de San Francisco, con la herramienta pmtiles de Protomaps.
Descargué el binario Go más reciente para macOS desde https://github.com/protomaps/go-pmtiles/releases, y encontré el cuadro delimitador aproximado con http://bboxfinder.com/#37.373977,-122.593346,37.570977,-122.....
El comando que ejecuté fue
pmtiles extract https://build.protomaps.com/20231023.pmtiles hmb.pmtiles \ --bbox=-122.593346,37.373977,-122.400055,37.570977, y al arrastrar el hmb.pmtiles de 2 MB resultante a la “drop zone” de https://maps.protomaps.com/, apareció un mapa detallado que permite hacer zoom hasta el nivel de metadatos de OpenStreetMap y contornos de edificios.Es realmente impresionante lograr eso en 2 MB, y el archivo está aquí: https://gist.githubusercontent.com/simonw/3c1a5358ca8f782f13...
Normalmente se incrusta Google Maps, pero muchas veces con un mapa de la zona local basta y puede salir más barato.
Es bastante genial, sobre todo porque el usuario nunca tendría que descargar el archivo completo, y me entusiasma la idea de poner mapas en sitios estáticos.
El archivo pmtile enlazado sí funciona, pero el archivo más pequeño que generé yo no. Aun así, el concepto de obtener un mapa para un proyecto es excelente.
Uso Mapbox con entusiasmo desde que recibí acceso alfa a Tilemill, y desde mi punto de vista esto es la contribución más importante al ámbito de los mapas abiertos desde los tiles vectoriales y Mapbox GL / Map GL.
Mapbox dejó una puerta abierta al abordar la generación de tiles con MTS, pero aunque era potente, también era demasiado complejo y caro. Se podían generar tiles con Tippecanoe, pero hospedar tiles vectoriales seguía siendo un dolor de cabeza; con PMTiles, el hosting de tiles vectoriales puede ser más fácil y cómodo que con Mapbox, y con costos más de un orden de magnitud menores.
Esto es especialmente cierto si no necesitas proyecciones llamativas ni soporte 3D y MapLibre te alcanza. Felt también parece ser uno de los servicios importantes que usan internamente un enfoque con PMTile, y es excelente que sigan invirtiendo en Tippecanoe. En un contexto en el que el foco de Mapbox parece desplazarse hacia la navegación vehicular, da gusto ver innovación disruptiva viniendo de otros lados, y lo más sorprendente es que esto salió de un equipo de una sola persona.
La aparición de PMTiles, combinada con el soporte de consultas espaciales de DuckDB, parece que abrirá muchas innovaciones. Si se pueden consultar y procesar archivos GeoParquet grandes y transmitirlos como PMTiles generados rápidamente, se habilitan casos de uso bastante potentes.
gpq convert Cairo_Governorate.parquet --to=geojson | tippecanoe Cairo.geojson -o Cairo.pmtileshttps://cloudnativegeo.org/blog/2023/10/where-is-cog-for-vec...
https://github.com/planetlabs/gpq
Suelo leer sin participar una comunidad online de desarrolladores periodistas, y ahí hay gente que ve a PMTiles como una forma de reducir costos al autoalojar tiles de mapas con estilos personalizados.
Por ejemplo, vale la pena ver “How The Post is replacing Mapbox with open source solutions” https://www.kschaul.com/post/2023/02/16/how-the-post-is-repl....
Para quien tenga curiosidad, el archivo PMTile de muestra derivado de OSM,
protomaps-basemap-opensource-20230408.pmtiles, pesa 103 GB.https://docs.protomaps.com/basemaps/downloads
Sería bueno poder descargar y aplicar solo los cambios para archivos diarios, semanales o mensuales.
“La API de Google Maps tiene un nivel gratuito generoso, pero después de superar las 30,000 cargas de mapa, el costo sube bastante. Protomaps se diseñó desde el inicio como un sistema autogestionado, y funciona con un backend 100% estático sobre almacenamiento en la nube, así que solo pagas los costos de almacenamiento y transferencia. Con un uso medio, puede estar en el orden de unos pocos centavos”; eso me parece interesante
Me gustaría ver una configuración de hosting recomendada, una comparación de costos con Google Maps, y en qué punto se cruzan las líneas de costo
Si no necesitas que esté 100% actualizado y el mapa se usa solo en una región específica, parece una forma realmente atractiva de autohostearlo. Recompilar el archivo una vez al año y subirlo a un hosting de archivos estáticos parece que sería un procedimiento sencillo, con muy pocas dependencias externas
Edición: encontré el enlace oficial de descarga de todo el mundo[1], y supera apenas los 100 GB. Entonces, la respuesta a mi pregunta parece ser “de unos cientos de MB a algunos GB”, y eso se ve totalmente aceptable
[1] https://docs.protomaps.com/basemaps/downloads
Al leer la documentación de Protomaps, explican cómo cachear las solicitudes en el CDN de Cloudflare, así que solo tienes que pagar una vez el costo de cada solicitud de tile por período de caché. Es bastante barato
El título de una publicación anterior sobre Protomaps era “Mapas serverless a 1/700 del costo de la API de Google Maps”
Brandon, fundador de Protomaps, estuvo hace unos meses en el podcast Geomob: https://thegeomob.com/podcast/episode-176
Lo que más me interesa es PMTiles
“PMTiles es un formato de archivo único para pirámides de datos de tiles. Un archivo PMTiles puede alojarse en plataformas de almacenamiento como S3, lo que permite aplicaciones de mapas de bajo costo y sin administración”
“PMTiles es un formato general para datos de tiles direccionados con coordenadas Z/X/Y. Puede contener distintos tipos de datos, como tiles vectoriales de mapas base, observaciones de teledetección o imágenes JPEG”
“Los lectores de PMTiles usan solicitudes de rango HTTP para traer bajo demanda solo los tiles o metadatos necesarios dentro de un archivo PMTiles”
“La distribución de tiles y directorios está diseñada para minimizar la cantidad de solicitudes adicionales al desplazarse y hacer zoom”
https://docs.protomaps.com/pmtiles/
Todos los días recibía un archivo CSV, lo convertía en tiles vectoriales, lo sincronizaba con S3 y lo mostraba en un mapa con mapbox-gl; el mayor costo eran las operaciones sobre archivos en S3. Para reducir costos, apliqué clustering de forma agresiva y bajé la cantidad de tiles a unos 75,000, pero con la frecuencia de actualización que quería, solo las operaciones de S3 costaban $500 al mes
Ahora proceso los archivos como un único archivo PMTiles y distribuyo solo ese archivo, así que el costo bajó a unos pocos centavos
Me abrió muchas posibilidades para crear mapas públicos, y si tienen curiosidad, pueden ver aquí los datos de focos de incendios de Canadá de todo 2023: https://lens.pathandfocus.com
Antes, en el mundo vectorial, las opciones eran muchísimos archivos pequeños o un archivo grande que requería un frontend para servir cada tile individual
Ahora puedes convertir un dump de OSM en mapas base por país en cuestión de minutos, o por continente en unas horas, usando una máquina potente, y luego autohostearlos en un servidor web común con una hoja de estilos personalizada
La combinación de Maplibre[1] + PMTiles + tippecanoe[2] de Felt es excelente para mapas web autohospedados si te parece bien quedar ligado a la proyección Web Mercator
Casi cualquier fuente geoespacial se puede convertir a
.pmtilescon GDAL[3] y tippecanoe:(.shp .gpkg ...) | ogr2ogr -> .geojson | tippecanoe -> .pmtilesPara datos de OpenStreetMap está planetiler[4], y también hay estilos de openmaptiles[5] que se pueden usar con Maplibre
Con esta combinación tienes un buen punto de partida con una canalización de datos open source que puedes alojar en AWS S3+CloudFront o Cloudflare R2 por unos pocos centavos
[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/
Además, la documentación de GDAL/ogr2ogr me parece bastante difícil de leer, así que como ejemplo inicial puedes ver un comando como este
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.ziphttps://census.gov/geographies/mapping-files/…
He contribuido a este proyecto y también lo usamos en producción en la empresa
Es realmente muy bueno, Brandon también es muy amable y uno termina agradeciendo todo el trabajo que se le ha dedicado hasta ahora
He obtenido resultados bastante buenos desplegando mapas serverless con PMTiles
Si te interesa desplegar en AWS CloudFront/Lambda@Edge/S3, puedes ver https://github.com/serverlessmaps/serverlessmaps