- MapLibre Tile (MLT) é um novo formato de vetor tile de próxima geração que substitui o Mapbox Vector Tile (MVT) existente, projetado para aumentar a eficiência no processamento de grandes volumes de dados geoespaciais
- Oferece taxa de compressão até 6 vezes melhor e desempenho rápido de decodificação com base em SIMD, melhorando espaço de armazenamento, latência e eficiência de cache
- Foi projetado para ser expansível no futuro, com suporte planejado para coordenadas 3D (elevação), processamento baseado em GPU, tipos de dados compostos, referência linear e m-values
- Já pode ser usado imediatamente no MapLibre GL JS e no MapLibre Native, com suporte a tiles de demonstração, servidor de conversão e geração via Planetiler
- É um formato desenvolvido pela colaboração entre a comunidade open source, empresas e academia, concluído com patrocínio da Microsoft e da AWS
Introdução ao MapLibre Tile
-
MapLibre Tile (MLT) é o formato sucessor do [Mapbox Vector Tile (MVT)], redesenhado do zero para lidar com o rápido crescimento do volume de dados geoespaciais e com formatos de origem complexos de próxima geração
- Foi projetado para aproveitar o desempenho de hardware moderno e APIs gráficas, permitindo processar e renderizar com alto desempenho basemaps 2D e 2.5D em escala planetária
- A implementação atual é funcionalmente equivalente ao MVT, mas traz melhorias em desempenho e eficiência
-
Principais melhorias técnicas
- Melhoria na compressão: até 6 vezes melhor em tiles grandes, com aplicação de layout orientado a colunas e codificação leve recursiva
- Melhoria no desempenho de decodificação: estrutura de codificação rápida e leve, compatível com instruções SIMD/vetorizadas
- Como resultado, há redução de latência, queda nos custos de armazenamento e transmissão e melhor aproveitamento de cache
Possibilidades de expansão futura
-
O MLT foi projetado considerando o suporte a recursos futuros como os seguintes
- Reforço do suporte a coordenadas 3D (elevação)
- Otimização de formatos de armazenamento e memória para processamento eficiente em CPU e GPU
- Suporte a referência linear (linear referencing) e m-values, tornando-o compatível com formatos de próxima geração como o Overture Maps (GeoParquet)
- Suporte a tipos compostos como atributos aninhados, listas e mapas
-
A direção de evolução do MLT será definida de acordo com as necessidades da comunidade, e diversas ideias de extensão e contribuições são bem-vindas
- Materiais relacionados incluem os slides da apresentação na FOSS4G 2024 de Markus Tremmel, a palestra no YouTube e um artigo da ACM
Disponibilidade e integração
-
O MLT está disponível para uso imediato
- Tanto o MapLibre GL JS quanto o MapLibre Native oferecem suporte a fontes MLT
- É possível usá-lo definindo o valor
mltna propriedadeencodingdo JSON de estilo
-
Como experimentar e desenvolver
- Usar o estilo de tiles de demonstração baseado em MLT
- Converter estilos MVT existentes para MLT em tempo real por meio do Encoding server
- A próxima versão do Planetiler deverá oferecer suporte à geração de MLT
- O status da integração pode ser consultado na página oficial de status de implementação
-
Para compartilhar experiências com o uso de MLT, recomenda-se participar do canal
#maplibre-tile-formatno Slack ou de issues/discussions no GitHub
Agradecimentos e colaboração
- O MLT foi desenvolvido por meio de anos de colaboração entre academia, open source e empresas
- Markus Tremmel idealizou o formato, e Yuri Astrakhan liderou o projeto
- Tim Sylvester foi responsável pela implementação em C++, enquanto Harel Mazor, Benedikt Vogl e Niklas Greindl cuidaram da implementação em JavaScript
- Microsoft e AWS financiaram o desenvolvimento
Observação
- Diferentemente do MVT, o MLT não oferece suporte a camadas em que o tipo dos valores dentro de uma coluna varia entre features
1 comentários
Comentários do Hacker News
Recomendo assistir à apresentação do MapLibre no devroom de Geospatial da FOSDEM no sábado
Link da programação do evento
Dei uma olhada rápida nas páginas de exemplo e comparei o exemplo de exibição de mapa com MLT com o exemplo atual de exibição de mapa
Pelos logs do console, deu para ver uma melhora de cerca de 10% na eficiência de compressão. Bastante impressionante
O formato MLT já vem com várias codificações leves embutidas, e cada tile também pode ser codificado de forma diferente
Por isso, é necessário um método heurístico para encontrar a melhor combinação, e existe um trade-off entre tamanho do tile e desempenho de decodificação
Ainda está no começo, mas a AWS continua patrocinando o trabalho de otimização do MLT neste ano, então ainda há bastante espaço para melhorias
Na hora de fazer benchmark, é mais importante observar os padrões reais de uso do que o tamanho total dos tiles — afinal, ninguém dá zoom no meio do oceano 😉
Recentemente publiquei uma solução baseada em pmtiles e estou muito satisfeito
Veja a documentação do PMTiles
O pmtiles usa MVT, mas espero que no futuro apareçam ferramentas para converter para MLT
MapLibre é a melhor biblioteca JS que já usei para exibir mapas no navegador
Fico animado em pensar na migração para o novo formato
No Planetiler, já é possível gerar MLT com a opção de CLI
--tile-format=mltPor enquanto isso só está na branch main, mas deve sair em release em breve
Nos testes, o tamanho do arquivo OpenMapTiles caiu cerca de 10% com a configuração padrão. Mais otimizações estão em andamento
Infelizmente, o Tilemaker não tem planos de suportar MLT no médio prazo
Então parte da comunidade pode acabar ficando de fora da migração
Veja a discussão na thread da issue
É interessante ver que formatos de arquivo vetorial ainda estão sendo reinventados
Eu entendo os ganhos em taxa de compressão e velocidade de decodificação, mas queria saber quais novas ideias ou insights motivaram esse design
Estou acompanhando este projeto há algum tempo e estou realmente animado
Para quem usa a stack do MapLibre, acho que o último grande passo é adicionar uma função As_MLT() ao PostGIS
Alguém aqui faz self-hosting de mapas? Queria saber os prós e contras e quais ferramentas vocês usam
O servidor só precisa conseguir servir arquivos estáticos com range request (tanto Caddy quanto Nginx servem)
Como o mapa é um único arquivo grande, também é fácil compartilhá-lo entre vários servidores
Quase não há desvantagens, mas é preciso adicionar uma biblioteca de suporte a protocolo customizado no lado do cliente
Editar estilos é um pouco chato, mas dá para carregar e modificar estilos do protomaps no editor Maputnik
Veja o guia
Criei separadamente um mapa mundial em baixa resolução (50MB) e um mapa da Austrália em alta resolução (900MB), e subi ambos para o S3
Como eu não preciso de dados atualizados, deixo assim mesmo, e funciona muito bem
As APIs comerciais tinham custo alto demais para gerar raster a 300dpi ou impunham restrições de revenda
Armazeno e sirvo tiles vetoriais com PostGIS, e guardo os dados raster no AWS S3 em formato GeoTiff COG
Geramos o pbf do OSM para a área de interesse (Colorado), subimos o container openstreetmap-tile-server e aplicamos o estilo para renderizar com renderd
O MLT também é legal, mas eu gostaria de ver esse tipo de avanço acontecer também nos formatos de tiles 3D
Hoje, o 3D Tiles da Cesium é praticamente a única opção, mas o desempenho não é tão rápido quanto eu esperava