- MapLibre Tile (MLT) es un nuevo formato de teselas vectoriales de próxima generación que reemplaza a Mapbox Vector Tile (MVT), diseñado para mejorar la eficiencia en el procesamiento de grandes volúmenes de datos geoespaciales
- Ofrece hasta 6 veces mejor compresión y rápido rendimiento de decodificación basado en SIMD, mejorando el espacio de almacenamiento, la latencia y la eficiencia del caché
- Está diseñado para poder expandirse en el futuro con soporte para coordenadas 3D (elevación), procesamiento basado en GPU, tipos de datos compuestos, referencia lineal y m-values
- Ya puede usarse de inmediato en MapLibre GL JS y MapLibre Native, con soporte para teselas de demostración, servidor de conversión y generación mediante Planetiler
- Es un formato desarrollado mediante la colaboración entre la comunidad open source, empresas y el ámbito académico, y fue completado con patrocinio de Microsoft y AWS
Introducción a MapLibre Tile
-
MapLibre Tile (MLT) es el formato sucesor de [Mapbox Vector Tile(MVT)] y fue rediseñado desde cero para manejar el creciente volumen de datos geoespaciales y los formatos fuente complejos de próxima generación
- Fue diseñado para aprovechar el rendimiento del hardware moderno y de las API gráficas, permitiendo procesar y renderizar con alto desempeño mapas base 2D y 2.5D a escala planetaria
- La implementación actual es funcionalmente equivalente a MVT, pero mejora en rendimiento y eficiencia
-
Principales mejoras técnicas
- Mejor compresión: hasta 6 veces de mejora en teselas grandes, aplicando un diseño orientado a columnas y codificación ligera recursiva
- Mejor rendimiento de decodificación: una estructura de codificación rápida y ligera que puede combinarse con instrucciones SIMD/vectorizadas
- Como resultado, se logra menor latencia, reducción de costos de almacenamiento y transferencia y mejor aprovechamiento del caché
Posibilidades de expansión futura
-
MLT fue diseñado pensando en dar soporte a las siguientes capacidades futuras
- Mayor soporte para coordenadas 3D (elevación)
- Optimización de formatos de almacenamiento y memoria para un procesamiento eficiente en CPU y GPU
- Soporte para referencia lineal (linear referencing) y m-values, para compatibilidad con formatos de próxima generación como Overture Maps (GeoParquet)
- Soporte para tipos compuestos como propiedades anidadas, listas y mapas
-
La dirección de evolución de MLT se determinará según las necesidades de la comunidad, y se reciben con interés distintas ideas de extensión y contribuciones
- Como materiales relacionados se ofrecen las diapositivas de la charla FOSS4G 2024 de Markus Tremmel, una charla en YouTube y un artículo de ACM
Disponibilidad e integración
-
MLT ya está disponible para usarse de inmediato
- Tanto MapLibre GL JS como MapLibre Native admiten fuentes MLT
- Puede usarse indicando el valor
mlten la propiedadencodingdel JSON de estilo
-
Cómo probarlo y desarrollarlo
- Usar el estilo de teselas de demostración basado en MLT
- Convertir en tiempo real estilos MVT existentes a MLT mediante el Encoding server
- La próxima versión de Planetiler incluirá soporte para generar MLT
- El estado de integración puede consultarse en la página oficial de estado de implementación
-
Para compartir experiencias usando MLT, se recomienda participar en el canal
#maplibre-tile-formatde Slack o en los issues/discussions de GitHub
Agradecimientos y colaboración
- MLT fue desarrollado mediante años de colaboración entre la academia, el open source y empresas
- Markus Tremmel ideó el formato, y Yuri Astrakhan lideró el proyecto
- Tim Sylvester se encargó de la implementación en C++, mientras que Harel Mazor, Benedikt Vogl y Niklas Greindl trabajaron en la implementación en JavaScript
- Microsoft y AWS financiaron el desarrollo
Nota
- A diferencia de MVT, MLT no admite capas donde el tipo de los valores dentro de una columna varía según el feature
1 comentarios
Comentarios en Hacker News
Recomiendo asistir a la charla de MapLibre en el geospatial devroom de FOSDEM este sábado
Enlace al programa del evento
Estuve revisando un poco las páginas de ejemplo y comparé el ejemplo de mostrar un mapa con MLT con el ejemplo existente de mostrar un mapa
Viendo los logs de la consola, confirmé una mejora de compresión de alrededor del 10%. Bastante impresionante
El formato MLT trae incorporadas varias codificaciones ligeras, y hasta se puede codificar cada tile de forma distinta
Por eso hace falta un enfoque heurístico para encontrar la mejor combinación, y existe un trade-off entre tamaño del tile y rendimiento de decodificación
Todavía está en una etapa temprana, pero AWS sigue patrocinando el trabajo de optimización de MLT este año, así que todavía hay mucho margen de mejora
Al hacer benchmarks, es más importante mirar los patrones de uso reales que el tamaño total de los tiles: nadie hace zoom en medio del océano 😉
Hace poco desplegué una solución basada en pmtiles y la verdad estoy muy satisfecho
Vean la documentación de PMTiles
pmtiles usa MVT, pero espero que en el futuro salgan herramientas para convertirlo a MLT
MapLibre es la mejor librería JS que he usado hasta ahora para mostrar mapas en el navegador
Me emociona pensar en el cambio al nuevo formato
En Planetiler se puede generar MLT con la opción de CLI
--tile-format=mltPor ahora solo está en la rama main, pero pronto saldrá en una release
En las pruebas, con la configuración por defecto, el tamaño del archivo OpenMapTiles bajó alrededor de un 10%. También se están haciendo más optimizaciones
Lamentablemente Tilemaker no tiene planes de soportar MLT a mediano plazo
Así que parte de la comunidad podría quedar fuera de la transición
Vean este hilo del issue
Es interesante que los formatos de archivos vectoriales todavía se sigan reinventando
Entiendo las mejoras en compresión o velocidad de decodificación, pero me da curiosidad cuál fue la idea nueva o insight que impulsó este diseño
Llevo tiempo siguiendo este proyecto y la verdad me entusiasma bastante
Desde la perspectiva de un usuario del stack de MapLibre, creo que la última gran tarea pendiente es agregar una función As_MLT() a PostGIS
¿Alguien aquí hace self-hosting de mapas? Me interesan los pros, los contras y qué herramientas usan
El servidor solo necesita poder servir archivos estáticos con range requests (sirve tanto Caddy como Nginx)
El mapa es un solo archivo grande, así que también es fácil compartirlo entre varios servidores
Casi no hay desventajas, aunque sí hay que agregar del lado del cliente una librería con soporte para protocolo personalizado
Editar estilos es un poco más complicado, pero se puede cargar y modificar un estilo de protomaps con el editor Maputnik
Vean la guía
Hice por separado un mapa mundial de baja resolución (50MB) y uno de Australia en alta resolución (900MB), y los subí a S3
Como no necesito datos actualizados, los dejo así y funciona muy bien
Las APIs comerciales tenían un costo demasiado alto para generar raster a 300dpi o restricciones para revenderlo
Guardo y sirvo vector tiles con PostGIS, y almaceno los datos ráster en AWS S3 en formato GeoTiff COG
Construimos el pbf de OSM para el área de interés (Colorado), levantamos el contenedor openstreetmap-tile-server y luego aplicamos el estilo para renderizar con renderd
MLT también está genial, pero ojalá hubiera avances así en los formatos de tiles 3D
Ahora mismo 3D Tiles de Cesium es prácticamente la única opción, pero el rendimiento no es tan rápido como uno esperaría