9 pontos por GN⁺ 2024-04-22 | 1 comentários | Compartilhar no WhatsApp

Apresentando o tinyworldmap

  • tinyworldmap é um mapa-múndi para web apps com prioridade offline e de baixa largura de banda
  • Foi projetado para ser usado com Leaflet e oferece suporte a todos os níveis de zoom
  • A versão mais completa tem apenas 300 kB com compressão gzip
  • A renderização no lado do cliente foi amplamente perfilada e testada em celulares antigos e de baixo desempenho de 10 anos atrás, sem latência perceptível
  • Por padrão, exibe as 10.000 cidades mais populosas adicionadas ao OpenStreetMap
  • No momento da escrita, inclui todas as cidades e vilas com população acima de 48.000 habitantes

Como usar o tinyworldmap

Usar como mapa base

  • Para usar o tinyworldmap como mapa base do Leaflet, adicione o seguinte à tag head:

  • Esse script inclui todos os dados necessários para exibir o mapa
  • Em vez de adicionar uma camada de tiles ao mapa Leaflet, use o seguinte:
new L.GridLayer.TinyWorld().addTo(map)
  • O construtor TinyWorld recebe várias opções: backgroundColor, textFillColor, borderStrokeColor, borderFillColor, borderWidth, textStrokeColor (para destacar o texto do restante), textStrokeWidth, cityFont (por exemplo, "12px Arial"), countryFont, dotColor
  • Se dotColor for especificado, cada cidade será exibida como um ponto. Isso melhora a usabilidade ao usar uma versão reduzida do tinyworldmap sem fronteiras

Usar como mapa de fallback

  • Em aplicações web com prioridade offline, é impossível armazenar em cache mapas baseados em imagem para todos os níveis de zoom (o número de tiles é enorme e o tamanho chega à escala de terabytes)
  • Este repositório fornece um service worker que pode habilitar funcionalidade offline em um web app
  • Depois que o service worker é instalado, o mapa de fallback é pré-carregado. Todas as páginas visitadas são armazenadas em cache, exceto o mapa base
  • Enquanto for possível se conectar ao servidor, os dados em cache não serão usados
  • Se o usuário estiver offline, o site será servido a partir do cache, e o service worker interceptará as requisições ao servidor de tiles do OSM e gerará localmente tiles substitutos usando o tinyworldmap
  • Antes de registrar o service worker, primeiro é necessário modificar todas as seções marcadas como 'IMPORTANT' dentro dele
  • Depois de registrado, é obrigatório atribuir corretamente tanto o OpenStreetMap quanto o tinyworldmap na camada de tiles, da seguinte forma:
L.tileLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png', {
  maxZoom: 19,
  attribution: '© [OpenStreetMap](https://www.openstreetmap.org/copyright), [tinyworldmap](https://www.tinyworldmap.com)'
}).addTo(map);
  • Para ver um exemplo de aplicação em produção usando o tinyworldmap como fallback, visite o Hitchmap. Carregue o site em um navegador com suporte a service worker, espere um pouco, desligue a internet e recarregue; o web app deverá continuar funcionando normalmente usando o mapa de fallback. A instalação do service worker pode levar algum tempo

Mapas-múndi ainda menores

  • O mapa completo tem 300 K com gzip / 694 K descompactado. Para certos casos de uso, esse tamanho ainda pode ser grande demais

Sem fronteiras

  • tiny-world-noborders-10000.js(on) contém todos os dados da versão completa, exceto fronteiras e linhas costeiras
  • A versão com gzip fica 100 k menor, e a versão descompactada 200 k menor
  • A versão sem fronteiras não é apenas menor, mas também tem a vantagem de que todos os dados incluídos são precisos
  • As fronteiras da versão completa não são precisas em níveis altos de zoom, então podem parecer estranhas ao sobrepor formas alinhadas com fronteiras e linhas costeiras. Nesses casos, a versão sem fronteiras combina melhor
  • O estilo padrão é o seguinte

Sem cidades

  • Há duas versões sem rótulos de cidades: tiny-world-nocities.js(on) (mantém os rótulos de países) e tiny-world-borders.js(on) (omite os rótulos de países)
  • Os rótulos de cidades ocupam 410 K sem compressão e 172 K comprimidos

Menos cidades

  • Por fim, cada arquivo com rótulos de cidades também tem versões com 2.000 e 4.000 cidades incluídas
  • Basta trocar 10000 por 2000 ou 4000 no nome do arquivo
Número de cidades incluídas População
10.000 > 48.000
4.000 > 137.000
2.000 > 287.000

Contratar o tinyworldmap

  • Se você precisa de um mapa personalizado (por exemplo, mais detalhado ou em outro idioma), ou de ajuda para implementar funcionalidade offline no seu site, entre em contato pelo e-mail business@tinyworldmap.com

Atribuição

  • Assim como os dados do OpenStreetMap, os dados do tinyworldmap são licenciados sob a ODBL e, portanto, exigem atribuição
  • Se você seguiu os passos descritos acima, o rodapé do Leaflet já deve incluir a atribuição ao OpenStreetMap e ao tinyworldmap. Caso contrário, adicione o seguinte:
© [OpenStreetMap](https://www.openstreetmap.org/copyright), [tinyworldmap](https://www.tinyworldmap.com)

Opinião do GN⁺

  • O tinyworldmap oferece um mapa-múndi leve que pode ser usado offline ou em dispositivos de baixo desempenho. Parece ser uma solução capaz de substituir opções existentes como o OpenStreetMap em certos cenários
  • A vantagem é oferecer versões ainda mais leves com exclusão opcional de fronteiras, cidades etc. Também parece bastante versátil por permitir mapas personalizados conforme a necessidade
  • Por outro lado, para funcionar offline é necessário implementar detalhes técnicos, como modificar o service worker, então é preciso que o desenvolvedor tenha alguma experiência. Seria bom haver um guia mais detalhado sobre essa parte
  • No mercado coreano, muita gente usa APIs de mapa de portais como Naver e Kakao, e se fosse possível integrar com esse tipo de serviço para funcionar offline, parece que surgiriam ainda mais casos de uso
  • Como inclui informações das principais cidades do mundo, parece poder ser útil em áreas como viagens e logística. O suporte multilíngue também deve ser um ponto importante

1 comentários

 
GN⁺ 2024-04-22
Comentários do Hacker News
  • O autor sugere que seria melhor investir mais dados na distinção da linha costeira e das principais metrópoles do que nos detalhes das áreas suburbanas de Detroit.
  • Há a observação de que falta detalhe na linha costeira, e que algumas cidades do Reino Unido estão submersas enquanto a Groenlândia e o norte do Canadá ocupam vértices demais. Parece que a projeção de Mercator já foi refletida, mas também há a opinião de que seria melhor dar menos prioridade a regiões sem população.
  • Um usuário criou um mapa semelhante, offline-first, ultracompacto e baseado em vetores, com foco em internacionalização (i18n) em idiomas oficiais da ONU, exceto espanhol. Os nomes de países e cidades usam as denominações oficialmente declaradas na ONU.
  • Houve o comentário de que os 10.000 maiores assentamentos do mundo chegam até uma população mínima de 48.000 habitantes, mas ainda não está claro se isso é um número surpreendente.
  • A ideia de comprimir dados espaciais em Paths é considerada impressionante, e foi dito que isso carrega muito rápido no mobile. No entanto, também houve a sugestão de usar dados do Natural Earth em vez do OSM para remover a licença ODbL e incluir a ferramenta que converte dados espaciais em Paths.
  • Também houve a opinião de que capitais deveriam ser incluídas e marcadas de forma especial independentemente do tamanho da população, e a de que esse mapa parece ideal para responder, em páginas de espécies, onde no mundo aquela espécie pode ser encontrada aproximadamente.
  • Foi apontado que usar Service Worker para uma versão offline é estranho, e que seria necessário um tutorial mais enxuto para que as pessoas possam instalar e usar rapidamente. Talvez fosse melhor oferecer simplesmente um arquivo HTML com os tiles codificados em base64 ou um arquivo ZIP.
  • É interessante que mudanças recentes em nomes preferidos, como Tchéquia e Macedônia, tenham sido refletidas, enquanto Turquia e Timor-Leste ainda não.
  • O carregamento progressivo parece um pouco instável, e às vezes há o problema de tiles não aparecerem ao ampliar ou mover rapidamente.