3 pontos por GN⁺ 2024-11-20 | 2 comentários | Compartilhar no WhatsApp
  • 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-pip e python3-virtualenv
  • No ambiente virtual Python, foram instalados os seguintes pacotes
    • leafmap[maplibre]
    • mapbox_vector_tile
    • morecantile
    • notebook
  • 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.maplibregl e a URL de estilo colorful.json para 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 para morecantile 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.decode e uma função de transformação de coordenadas
  • As chaves de nível superior do tile convertido incluem as seguintes camadas
    • addresses
    • bridges
    • buildings
    • ferries
    • land
    • ocean
    • pier_lines
    • pier_polygons
    • place_labels
    • pois
    • public_transport
    • sites
    • street_labels
    • street_polygons
    • streets
    • streets_labels_points
    • water_polygons
    • water_polygons_labels

Explorando a camada de POI com DuckDB

  • A camada pois foi extraída para um arquivo JSON separado e aberta para análise com ST_READ do DuckDB
  • Os POIs com valor em cuisine retornaram 67 linhas
    • Exemplos de amenity incluem restaurant, fast_food e cafe
    • Exemplos de cuisine incluem french, greek, american, lebanese, coffee_shop, asian, persian, chicken e pizza
  • O resultado de SUMMARIZE no 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_de e name_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, name tem 258 valores, name_de 264, name_en 245, amenity 27 e cuisine 39

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.8MB
    • buildings.gpkg: 6.2MB
    • pois.gpkg: 1.4MB
    • street_labels.gpkg: 1.4MB
    • land.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.gpkg para POIs com nome retorna 6.329 linhas, incluindo nomes como Kiku, Fujiya Restaurant, Mövenpick Grand Al Bustan Dubai e McDonald's

2 comentários

 
GN⁺ 2024-11-20
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

    • Isso está basicamente certo, mas a perspectiva pode ser um pouco diferente. Para quem fornece mapas, a principal vantagem dos tiles vetoriais não é um ganho pequeno como nitidez ou flexibilidade de estilo, e sim a redução enorme na computação necessária
      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
    • Até agora, parece que o foco esteve mais no software para gerar tiles vetoriais atualizados continuamente do que em enriquecer os estilos que usam esses tiles
    • Fiz um fork do OpenrailwayMap. O original é https://www.openrailwaymap.org e o estilo vetorial está em https://openrailwaymap.fly.dev
      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
    • Concordo totalmente. Quando procuro caminhos, misturo OpenStreetMap e Google Maps, e mesmo querendo usar só o OSM, ele não tem tantos lugares cadastrados quanto o Google Maps
      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
    • Penso exatamente igual. O estilo padrão de openstreetmap.org, para mim, chega perto de felicidade pura, e venho tentando há bastante tempo fazer um mapa vetorial naquele nível, sem encontrar um resultado realmente utilizável
      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

    • É um pouco surpreendente que o OSM tenha demorado tanto para chegar até aqui. Os elementos técnicos básicos já existiam havia mais de 10 anos
      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

    • Sim e não
      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
      1. https://operations.osmfoundation.org/2024/01/25/owg_budget.o...
      2. https://osmfoundation.org/wiki/Finances
    • Também dá para dizer que não. Tiles vetoriais já podiam ser auto-hospedados com bem pouco esforço ou hospedados por terceiros há bastante tempo
      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
    • Sim, tiles vetoriais são muito mais fáceis de auto-hospedar
      Por exemplo: https://protomaps.com/, https://openmaptiles.org/, https://versatiles.org/
    • Sou a pessoa que criou o openfreemap.org. Sim. Tiles vetoriais são basicamente hospedar arquivos estáticos, e o servidor não tem nada a fazer além da criptografia HTTPS
      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

    • O ponto central dos tiles vetoriais é que a renderização acontece localmente e, tirando o esquema do tile, é controlada por configurações de estilo que podem ser alteradas
      Portanto, essa quebra visível é um problema do estilo ou da biblioteca que renderiza o conteúdo localmente
    • Não sei como funciona o renderizador de tiles vetoriais do QGIS, mas se for a página de demonstração no GitHub, deve ser fácil adicionar o plugin de texto RTL ao MapLibre para tratar corretamente textos escritos da direita para a esquerda: https://maplibre.org/maplibre-gl-js/docs/examples/mapbox-gl-...
  • Vale ver também: OpenFreeMap — hospedagem gratuita de tiles vetoriais do OpenStreetMap
    https://openfreemap.org/

    • O OpenFreeMap não oferece: busca ou geocodificação, cálculo de rotas·navegação·orientação de percurso, geração de imagens estáticas, hospedagem de tiles raster, hospedagem de imagens de satélite, consulta de elevação, hospedagem de tiles personalizados ou datasets
      https://github.com/hyperknot/openfreemap?tab=readme-ov-file#...
    • Uau, parece muito bem acabado
      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

    • Eu realmente odeio quando nomes de cidades e ruas somem ao dar zoom no Google Maps. Alguns nomes de ruas ou lojas só aparecem em um nível específico de zoom, e desaparecem se você aumentar ou diminuir mais
      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
    • De qualquer forma, o ponto de partida já é o posicionamento automático de rótulos
      Isso também era verdade para os tiles raster usados há anos
    • Existe algum motivo para esperar que o algoritmo de posicionamento mude drasticamente?
  • 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?

    • As grandes cidades já incluem nomes em vários idiomas. Basta ver Paris: https://www.openstreetmap.org/relation/71525
      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
    • O shortbread, que é o esquema de tiles usado atualmente nos testes, não oferece suporte a vários idiomas, mas pelo que sei o pessoal que está trabalhando nisso pretende adicionar esse suporte quando os bugs forem resolvidos
      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
    • Não, mas dá para buscar tiles que contenham só o texto necessário e aplicar um patch nos tiles que você já tem
  • 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

    • Os dois apps usam principalmente dados de mapas baixados/offline pré-processados em formatos próprios
      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
    • Não pode existir um único aplicativo de mapas definitivo. Os casos de uso são diferentes
      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
    • Pelo menos seria bom se os dois pudessem compartilhar tiles de mapa, para não precisarem usar gigabytes de espaço duplicando o mesmo mapa
  • 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

    • Fui procurar o app Marble no Android, mas ele não está nem na Play Store nem no F-Droid. O link da Play Store no site dá 404. Foi abandonado?