Os novos vector tiles do OpenStreetMap
(tech.marksblogg.com)- O OpenStreetMap oferece há muito tempo raster tiles estáticos baseados em PNG, mas agora começou a hospedar vector tiles no formato Mapbox Vector Tiles (MVT), ampliando as formas de uso dos mapas
- Os vector tiles permitem que o usuário ajuste estilos e regras de renderização, além de abrir espaço para extrair informações dos tiles e implementar recursos como troca de idioma dos rótulos
- O site principal do OSM ainda usa raster tiles, mas os novos vector tiles podem ser vistos diretamente em uma demo web, no QGIS e no Leafmap
- No exemplo do tile z14 perto do Burj Khalifa, um MVT de 114 KB foi convertido em um JSON de 1,4 MB, e a camada de POI inclui 474 registros e várias chaves de camada de nível superior
- Com
tiles2columns, é possível baixar vector tiles do OSM dentro de uma bounding box especificada e convertê-los em GeoPackage ou Parquet, facilitando o uso imediato de dados atualizados do OSM em análises baseadas em arquivos
Onde os tiles do OSM estão mudando
- Até agora, o OpenStreetMap fornecia mapas em raster tiles PNG estáticos, com regras de renderização e estilo previamente definidas
- A nova hospedagem fornece Mapbox Vector Tiles, ou seja, vector tiles no formato MVT
- Com vector tiles, o usuário final pode controlar mais diretamente a forma como o mapa é apresentado
- Ajuste de estilos e regras de renderização
- Extração das informações base incluídas em cada tile
- Exibição de imagens de mapa mais nítidas
- Possibilidade de troca do idioma dos rótulos
- O site principal do OSM continua fornecendo raster tiles
- Os novos vector tiles podem ser vistos em uma demo web na maioria dos celulares e desktops
Ferramentas usadas na prática
- Os exemplos visualizam e analisam dados do OSM com Python e várias ferramentas geoespaciais
- As ferramentas básicas de instalação incluem
jq,python3-pipepython3-virtualenv - No ambiente virtual Python, foram instalados os seguintes pacotes
leafmap[maplibre]mapbox_vector_tilemorecantilenotebook
- O DuckDB foi usado com as seguintes extensões
- Para renderização de mapas, foi usado o QGIS 3.40
- O QGIS é um aplicativo desktop que roda em Windows, macOS e Linux
- O número de execuções do aplicativo por usuários no mundo todo fica em cerca de 15 milhões por mês
Abrindo vector tiles no QGIS
- No QGIS, é possível adicionar os vector tiles do OSM em
Layer Menu -> Add Layer -> Add Vector Tile Layer - Em uma nova conexão, a URL de estilo usa o seguinte valor
- A URL da fonte aponta para o seguinte endpoint MVT
- A stylesheet é opcional; mesmo sem ela, o QGIS consegue renderizar os dados vetoriais com cores arbitrárias
- No QGIS, foi observado um problema de renderização de ícones desalinhada
- Outras ferramentas de mapeamento renderizam normalmente os sprites desse estilo
- No QGIS, os ícones aparecem como ícones pretos borrados
- A issue relacionada está em QGIS #59492
Renderização com Leafmap e Jupyter Notebook
- Foi criada a pasta de configuração do Jupyter Notebook, definida uma senha e iniciado o servidor em
127.0.0.1 - O Notebook roda com as permissões do usuário que o iniciou e pode expor o diretório atual e arquivos abaixo dele, por isso foi usado o método de executá-lo em uma pasta vazia
- No Leafmap, foi usado
leafmap.maplibregle a URL de estilocolorful.jsonpara renderizar a área ao redor do Burj Khalifa - Na renderização com Leafmap, os ícones de POI aparecem corretamente
Transformando MVT em dados analisáveis
- Foi usado como exemplo o tile de zoom level 14 perto do Burj Khalifa
- As coordenadas aproximadas
[55.27, 25.2]foram passadas paramorecantile tiles 14, gerando as coordenadas de tile[10707, 7006, 14] - Com esse valor, foi baixado o seguinte tile
- O arquivo MVT de 114 KB foi convertido em um arquivo JSON de 1,4 MB com
mapbox_vector_tile.decodee uma função de transformação de coordenadas - As chaves de nível superior do tile convertido incluem as seguintes camadas
addressesbridgesbuildingsferrieslandoceanpier_linespier_polygonsplace_labelspoispublic_transportsitesstreet_labelsstreet_polygonsstreetsstreets_labels_pointswater_polygonswater_polygons_labels
Explorando a camada de POI com DuckDB
- A camada
poisfoi extraída para um arquivo JSON separado e aberta para análise comST_READdo DuckDB - Os POIs com valor em
cuisineretornaram 67 linhas- Exemplos de
amenityincluemrestaurant,fast_foodecafe - Exemplos de
cuisineincluemfrench,greek,american,lebanese,coffee_shop,asian,persian,chickenepizza
- Exemplos de
- O resultado de
SUMMARIZEno DuckDB mostra o nível de preenchimento dos dados de POI- Total de registros de POI: 474
- A proporção de null em
name,name_deename_ené de 29,96% em cada caso - A proporção de null em
amenityé de 31,86% - A proporção de null em
cuisineé de 85,86% - A proporção de null em
geomé de 0,00%
- Pelo critério
approx_unique,nametem 258 valores,name_de264,name_en245,amenity27 ecuisine39
Extraindo uma bounding box com tiles2columns
- O osm_split existente era uma ferramenta para converter arquivos OSM PBF criados pelo GeoFabrik em arquivos GeoPackage nomeados
- Os arquivos PBF do GeoFabrik podem estar alguns dias defasados no momento em que se tornam processáveis
- Os novos vector tiles do OSM são atualizados logo após a edição dos dados base
- O tiles2columns é um utilitário em Python que baixa tiles do OSM dentro de uma bounding box especificada e os converte em arquivos GeoPackage ou Parquet
- No exemplo da bounding box ao redor do norte de Dubai, foram baixados 42 tiles e gerados arquivos GeoPackage de alguns MB
streets.gpkg: 6.8MBbuildings.gpkg: 6.2MBpois.gpkg: 1.4MBstreet_labels.gpkg: 1.4MBland.gpkg: 744KB
- Os arquivos GeoPackage gerados podem ser adicionados diretamente a um projeto do QGIS
- Os arquivos são separados pelas chaves usadas nos arquivos OSM MVT, o que facilita identificar, estilizar e analisar cada camada de forma independente
- Os atributos de cada geometria são armazenados em colunas separadas
- Um exemplo de consulta em
pois.gpkgpara POIs com nome retorna 6.329 linhas, incluindo nomes comoKiku,Fujiya Restaurant,Mövenpick Grand Al Bustan DubaieMcDonald's
2 comentários
A OpenStreetMap Foundation começou oficialmente a operar tiles de mapa vetoriais
Comentários no Hacker News
Tenho uma relação meio complicada com tiles vetoriais. Ainda não encontrei uma combinação de estilo e esquema de gerador de tiles que mostre o mesmo nível de detalhe que os tiles raster originais
Só pelos screenshots do post, a diferença é gritante. O primeiro tem muita informação, como pontos de interesse tipo estátuas, lojas, teatros e mirantes, vias mostradas como pontes, diferença de cor entre gramado e parque, espessura de linha por tipo de via, quadras esportivas, nomes de edifícios e bairros, setas de mão única, partes de edifícios, escadas, árvores etc.
O segundo tem basicamente só uma parada de trolley e um nome de rua, e até esse nome de rua foi renderizado errado
Já usei bastante estilos do openmaptiles, o estilo padrão do protomaps, estilos do mapbox e geradores do protomaps, openmaptiles e mapbox, mas nada chegou perto dos tiles raster do OSM em legibilidade e riqueza de detalhes
Os estilos vetoriais têm zoom e pan mais suaves e são mais fáceis de ajustar, mas ficam aquém quando você quer ver dados reais de mapa, e não só usar como mapa de fundo para os seus próprios dados
Talvez seja uma limitação de recursos computacionais. Mostrar o nível de detalhe dos tiles raster do OSM pode consumir recursos demais tanto no cliente quanto na geração dos tiles
Em vez de o OpenStreetMap fornecer mais um mapa de fundo com baixo contraste e poucos detalhes, seria bom se imitasse mais de perto o estilo raster existente, e espero que este lançamento público de tiles vetoriais permita mapas vetoriais mais detalhados
Manter uma infraestrutura moderna de geração de tiles raster dá um trabalho considerável
Há muito tempo desenvolvi um estilo bem detalhado para planejamento de cicloturismo: https://stevebennett.me/2015/01/14/cycletour-org-a-better-ma...
Tentei várias vezes recriá-lo com tiles vetoriais, mas foi bem difícil incluir detalhes suficientes sem estourar os limites de tamanho, e os tiles padrão do Mapbox tinham muito menos informação do que eu precisava
Ainda assim, tiles vetoriais têm formas de contornar problemas que os raster não têm. Por exemplo, dá para ligar e desligar camadas diferentes e, ao mesmo tempo, os rótulos podem reconhecer o que existe embaixo deles, preservando a legibilidade
Ajustei o estilo para ficar próximo da aparência dos tiles raster originais, mas acrescentei muito mais recursos interativos na versão vetorial
O ponto interessante, do ponto de vista de design de estilo e de tiles, é que os trade-offs de desempenho mudam completamente dependendo de onde e como os tiles são renderizados. Parece óbvio, mas isso também afeta o que é visualmente possível no servidor e no cliente
Ainda assim, o mapa do OSM é muito mais útil porque mostra muitos pontos de interesse. Só de olhar o mapa você já ganha uma noção do lugar real, e parques parecem parques, hospitais parecem hospitais
O Google Maps pode parecer melhor do ponto de vista de um designer gráfico. Mas, para se orientar, normalmente você precisa comparar o formato das ruas e cruzamentos. No Google Maps, tudo parece parecido
Bastam 2 minutos mexendo para a perda de detalhes ficar evidente. É realmente uma pena, mas continuo otimista de que alguém vai resolver isso algum dia
Foi interessante ver a comunidade open source construir a funcionalidade de tiles de mapa vetoriais. Quando eu trabalhava com GIS web por volta de 2018, os mapas vetoriais em streaming de Google/Apple pareciam magia, e eu certamente teria usado se pudesse bancar o custo
Pouco depois, a tecnologia principal apareceu em open source, e até soluções de hospedagem gratuita surgiram. Agora dá para usar ótimas camadas vetoriais de graça em mapas Leaflet. Sou grato ao open source
Não é uma reclamação sobre um serviço de mapas gratuito; o serviço é excelente, e eu entendo que o foco seja mais em edição e propriedade dos dados. A infraestrutura oferecida é difícil e cara
Mas fico curioso sobre o quanto a dominância do MapBox atrapalhou outras tentativas ao longo desses anos
Fiquei curioso se isso reduz os custos operacionais ao hospedar mapas baseados em OSM. Parece que exige menos CPU para renderização, e vetores provavelmente também ocupam menos armazenamento e largura de banda
O motivo do não é que a camada oficial de tiles do OSM recebe um grande patrocínio da Fastly. Da última vez que verifiquei, a Fastly contribuía com €720k e a renderização na AWS custava €40k
O motivo do sim é que, tecnicamente, usa menos recursos, então também pesa menos para AWS+Fastly e facilita a auto-hospedagem
Em uma avaliação de risco que li em detalhe há algum tempo, o OSM dizia que “se perder o patrocínio da Fastly, provavelmente cortará todo o acesso de terceiros à camada de tiles padrão e manterá apenas alguns poucos servidores Varnish em operação”
Pelo que entendi, a principal motivação para vetores estava menos em reduzir custos e mais em melhorar a internacionalização, permitir decisões de renderização no lado do cliente e criar uma pilha de ferramentas moderna que traga vários benefícios posteriores
Deve haver informações mais recentes, e os materiais relacionados estão em 1 e 2
Ainda assim, faz sentido no aspecto de transferir parte do processamento para o cliente e, mais importante, permitir que o cliente tome muitas decisões de estilo. Claro, não todas
Tiles vetoriais estáticos ou que não são atualizados com frequência podem ser gerados a partir de dados do OSM com várias ferramentas, e as mais populares no momento são https://github.com/systemed/tilemaker e https://github.com/onthegomap/planetiler
O que realmente há de novo é que, graças ao trabalho que Paul fez para a OSMF, agora é possível atualizar tiles vetoriais imediatamente, ou seja, em poucos minutos. Isso é importante como mecanismo de feedback para os contribuidores do OSM e também é o principal motivo de a OSMF operar hoje o serviço de tiles raster
No momento, ainda está em aberto que tipo de restrições haverá para o uso do serviço de tiles vetoriais. Assim como no serviço de tiles raster, a intenção não é competir nem substituir serviços de terceiros, mas o serviço de tiles vetoriais potencialmente poderia fazer isso
Por exemplo: https://protomaps.com/, https://openmaptiles.org/, https://versatiles.org/
A compressão gzip já vem pronta dentro dos próprios tiles
Outro problema é que, na versão vetorial, a fonte em árabe não está sendo renderizada corretamente. Em vez de aparecer da direita para a esquerda, aparece da esquerda para a direita, e as letras não se conectam, ficando separadas
Portanto, essa quebra visível é um problema do estilo ou da biblioteca que renderiza o conteúdo localmente
Vale ver também: OpenFreeMap — hospedagem gratuita de tiles vetoriais do OpenStreetMap
https://openfreemap.org/
https://github.com/hyperknot/openfreemap?tab=readme-ov-file#...
Fiquei curioso se isso também é baseado na mesma stack vetorial ou se foi um desenvolvimento totalmente separado
A parte que diz “as imagens ficarão muito mais nítidas e também será possível trocar o idioma dos rótulos” parece algo que provavelmente não vai funcionar tão bem quanto o esperado
Ao trocar de idioma, não há garantia nenhuma de que o tamanho dos rótulos vai permanecer o mesmo, e o tamanho dos rótulos interage com o layout do mapa e também determina o que será exibido
Se os rótulos ficarem maiores, podem cobrir mapa demais ou se sobrepor. Se ficarem menores, o usuário pode estranhar por que cidades que antes eram omitidas por falta de espaço não aparecem agora no espaço vazio que surgiu
Era só mostrar o nome de todas as ruas. Não me importo se ficar carregado. Estar parado num cruzamento olhando para um mapa sem nomes é um mapa inútil
Isso também era verdade para os tiles raster usados há anos
Uma mudança nova muito bem-vinda. Estou esperando mapas com visual melhor
Mas a seção “my workstation” é um pouco estranha. Não parece ter muita relação com o resto do texto, e também não dá a impressão de que o trabalho tratado depois exija requisitos de sistema tão altos
Se “as imagens vão ficar muito mais nítidas e também será possível alternar o idioma dos rótulos”, isso significa, por exemplo, que os vetores do formato da cidade — mais precisamente, os metadados dos nomes das cidades em todos os idiomas para os quais há polígonos definidos — vão junto?
A utilidade do recurso de troca de idioma obviamente depende da existência das traduções. Isso também pode incentivar os editores a adicionar mais traduções de nomes de lugares
Um exemplo desse tipo de visual pode ser visto em https://americanamap.org. Ele usa dados do OSM, mas não busca ser quase em tempo real como os tiles deste artigo
Seria ótimo se isso significasse que o OSMAnd e o OrganicMaps finalmente vão unir forças e lançar o aplicativo de mapas livre e de código aberto definitivo
Tiles vetoriais no formato MVT não são nada adequados para navegação ou busca. Isso não quer dizer que seja impossível forçar uma integração, mas seria bem complicado
Por exemplo, o OSMAnd tem muitos recursos avançados muito úteis para quem contribui com o OSM, mas num app para usuários em geral isso só poluiria a interface
O https://marble.kde.org/ já tinha sua própria implementação de camadas vetoriais de OSM em streaming desde 9 anos atrás, e faz bastante tempo que eu esperava ver algo parecido aparecer em outros apps de mapa do OSM
Nos apps de OSM para Android, sempre foi um problema de armazenamento ter que baixar mapas de centenas de megabytes em blocos enormes, no tamanho de um país inteiro. Fico muito feliz que finalmente um padrão esteja se consolidando, e espero que ele seja adotado e refinado em vários apps. Excelente trabalho