- tinyworldmap é um mapa-múndi para apps web offline-first e de baixa largura de banda, projetado para ser usado com o Leaflet
- Suporta todos os níveis de zoom, e a versão mais completa tem 450 KB com gzip; a renderização no cliente foi perfilada e testada para não apresentar atraso perceptível mesmo em celulares modestos de 10 anos atrás
- O mapa padrão exibe as 10.000 cidades mais populosas adicionadas ao OpenStreetMap, incluindo, no momento da escrita, cidades e municípios com população de 48.000 habitantes ou mais
- Há duas formas de uso: como mapa-base que substitui os tiles do OpenStreetMap, ou como mapa de fallback que, quando offline, troca as requisições de tiles do OSM por tiles gerados localmente
- Os dados do mapa seguem a licença ODBL, como o OpenStreetMap, e é necessário atribuir créditos ao OpenStreetMap e ao tinyworldmap no rodapé do Leaflet ou equivalente
Objetivo e escopo do tinyworldmap
- tinyworldmap é um mapa-múndi para apps web offline-first e de baixa largura de banda
- Foi projetado para ser usado com o Leaflet e suporta todos os níveis de zoom
- A versão mais completa tem 450 KB com gzip e 1,1 MB descompactada
- A renderização no lado do cliente foi amplamente perfilada e testada em celulares modestos de 10 anos atrás, sem atraso perceptível
- As demonstrações estão disponíveis em Nightly demo, Stable demo e v3 announcement
Dados do mapa padrão
- Na configuração padrão, exibe as 10.000 cidades mais populosas adicionadas ao OpenStreetMap
- No momento da escrita, esse recorte inclui todas as cidades e municípios com população de 48.000 habitantes ou mais
Duas formas de uso no Leaflet
Estilo do mapa e mapas personalizados
- O construtor aceita a opção
render para alterar a aparência do mapa
- A opção
style de cada camada é aplicada ao CanvasRenderingContext2D do Canvas
- Por exemplo, é possível alterar o estilo definindo
fillStyle na camada state_borders
let render = {
state_borders: {
style: {fillStyle: '#f00'}
}
}
new L.GridLayer.TinyWorld({maxZoom: 19, render}).addTo(map)
- Se sua organização precisar de um mapa rodoviário, mapa urbano, mapa em outro idioma ou um mapa com conteúdo personalizado incluindo dados OSM ou não OSM, é possível solicitar um orçamento em
business@tinyworldmap.com
Opções de arquivos de mapa menores
-
Versão sem fronteiras
tiny-world-cities-10000.js(on) inclui os dados da versão completa, exceto fronteiras estaduais, fronteiras nacionais e linhas costeiras
- Essa versão reduz 300 KB com gzip e 825 KB descompactada
- A versão sem fronteiras tem a vantagem de que todos os dados incluídos são precisos
- As fronteiras nacionais da versão completa não são precisas em níveis altos de zoom, então podem parecer estranhas ao sobrepor formas que se alinham a fronteiras nacionais ou linhas costeiras
- Nesses casos, a versão sem fronteiras muitas vezes fica melhor
-
Versão sem rótulos de cidades
- Há dois arquivos sem rótulos de cidades
tiny-world-borders.js(on): omite fronteiras estaduais
tiny-world-nocities.js(on): mantém fronteiras estaduais
- Os rótulos de cidades ocupam 410 KB descompactados e 172 KB comprimidos
-
Versões com menos cidades
- Arquivos com rótulos de cidades também estão disponíveis nas versões com 2.000 e 4.000 cidades
- Basta trocar
10000 por 2000 ou 4000 no nome do arquivo
- | Número de cidades incluídas | Critério de população |
- | --- | --- |
- | 10.000 | Mais de 48.000 habitantes |
- | 4.000 | Mais de 137.000 habitantes |
- | 2.000 | Mais de 287.000 habitantes |
Licença e atribuição
- Os dados do tinyworldmap seguem a licença ODBL, assim como os dados do OpenStreetMap
- A ODBL exige atribuição
- Se configurado conforme as instruções, o rodapé do Leaflet deve incluir a atribuição ao OpenStreetMap e ao tinyworldmap
- Caso contrário, é necessário adicionar separadamente a atribuição ao OpenStreetMap e ao tinyworldmap
1 comentários
Opiniões no Hacker News
Gosto da ideia. É bom porque resolve o problema de reduzir o zoom demais e ter que esperar o servidor renderizar o tile do continente que você acabou de pedir.
Mas não sei bem qual é o caso de uso em que dá para saber a posição relativa de West Bloomfield Township e Waterford Charter Township, subúrbios de Detroit, mas não saber em qual estado ficam nem se os Great Lakes existem.
Seria melhor usar muito mais dados nas linhas costeiras e muito menos na subdivisão de áreas metropolitanas.
Elas acabam escondendo informações demais que poderiam estar ali.
É legal, mas o detalhamento da linha costeira é baixo demais. Algumas cidades do Reino Unido ficam flutuando no mar e, por outro lado, Greenland e Northern Canada ficam com todos os vértices.
Parece que o nível de detalhe conforme a projeção de Mercator já foi considerado, mas seria bom reduzir a prioridade de regiões onde quase ninguém mora.
O DB SQLite do QRank também já apareceu no HN tempos atrás.
[1] https://qrank.wmcloud.org/
[2] https://github.com/hikeratlas/qrank
Uma província dos Netherlands aparece separada do território continental do país, como se fosse uma ilha, mas na realidade não é. Só que o mapa sabe o nome de cinco cidades dentro dessa província, e algumas delas quase se sobrepõem.
Por outro lado, incluir o Afsluitdijk me parece pessoalmente um detalhe desnecessário, mas entendo que seja difícil distinguir por programa o que é terra a ser desenhada e o que é simples infraestrutura marítima.
Eu deveria abrir um ticket no issue tracker, mas não estou logado no celular, então por enquanto um comentário no HN é o melhor que dá. Se alguém sentir algo parecido, pode usar este comentário como base para sugerir melhorias como ajustar essa proporção, introduzir uma distância mínima entre cidades e reduzir o arquivo total.
French Polynesia nem existe no mapa.
O motivo de isso não ter sido feito originalmente é que, em celulares antigos, especialmente no Firefox for Android, desenhar muitos polígonos podia causar crashes. Depois o procedimento de desenho foi otimizado, mas ainda é preciso cautela.
[1] https://tinyworldmap.com/beta.html
Isso é algo que deveria ser pego em um controle de qualidade básico.
Fiz algo parecido. É offline-first, muito pequeno e baseado em vetores, mas com foco em internacionalização.
Está disponível em todos os idiomas da ONU. Só que esqueci totalmente o Spanish, então ele ficou de fora; daria para fazer em algumas horas, o que é constrangedor.
Os nomes de países e cidades usam as denominações oficiais registradas na ONU. Por isso, o nome curto oficial do UK é “United Kingdom of Great Britain and Northern Ireland”.
https://map.ache.one/en
Desenhar um mapa leve e lidar com internacionalização foi relativamente fácil, porque há várias fontes de dados abertas e bibliotecas.
A parte realmente difícil é puramente a definição administrativa. Se você tiver dados ligados à maioria dos países, inevitavelmente haverá pontos que não batem com a fonte do mapa, e no fim será preciso criar um mapa personalizado na mão.
Não há consenso sobre o que é um “país”. Western Sahara é oficialmente um país, mas na prática Morocco o ocupa continuamente; Somalia tem Somaliland e Puntland funcionando de fato como países independentes, mas sem reconhecimento oficial. Greenland, Niue etc. ficam em algum lugar no meio disso.
Pela minha experiência fazendo isso no nível de países, foi um processo manual cheio de hacks sujos, e a parte mais difícil foi testar se tudo estava correto. Especialmente o nível de generalização adequado e a aparência que as pessoas esperam do mapa da própria região.
Fico curioso se você acha que vale a pena o esforço de melhorar bastante esse mapa.
O asterisco está em Dar Es Salaam, mas o rótulo é Dodoma. Dodoma é a capital de fato, mas fica mais para o centro do país.
Fofo. Antigamente fiz algo parecido, embora não exatamente igual.
https://web.archive.org/web/20020611095429/http://www.cs.man.ac.uk/~hancockd/CityZen/index.html
Eram 20 mil segmentos de linha, 3.350 lugares, e tudo junto — incluindo visualizador e quiz — tinha 162 KB.
Obrigado pelo feedback. Para explicar o contexto da escolha: até recentemente, o foco principal deste projeto não eram os formatos dos países
Durante muito tempo, a versão sem fronteiras que estava no README era a única versão, e eu não achava que fosse possível adicionar o mundo inteiro. Mas foi possível
Publiquei uma versão nightly que remove os fiordes, inclui ilhas muito solicitadas e coloca mais detalhes em outros lugares. No geral, a resolução também é maior
O motivo de eu não ter feito isso originalmente era que celulares antigos, especialmente no Firefox for Android, podiam travar ao desenhar muitos polígonos. Depois disso, otimizei o procedimento de desenho, mas ainda é preciso cuidado
[1] https://tinyworldmap.com/beta.html
Não tenho certeza se as 10.000 cidades mais populosas são o melhor filtro
Esse método prioriza cidades de países grandes, e é provável que a maioria das cidades de países pequenos fique de fora
Deveria haver um filtro auxiliar que incluísse as X principais cidades de cada país. Assim, as principais cidades dos países pequenos também seriam capturadas
Critérios como capital nacional, capital regional, cidade global e centralidade dentro da região poderiam ser úteis para complementar as condições básicas
Acho que geógrafos e cartógrafos poderiam dar conselhos mais úteis nessa discussão
Achei interessante que, ao escolher os 10.000 maiores assentamentos do mundo, o corte desce até 48.000 habitantes
Ainda estou avaliando se esse número é surpreendente ou não
Mesmo aumentando para 200, ainda fica acima de 100 mil. Daly City, CA, que é a nº 333 segundo a Wikipedia, tem 100.007 habitantes: <https://en.wikipedia.org/wiki/List_of_United_States_cities_b...>
Essa distribuição de escala, como em muitas outras situações de escalonamento, tende a ser aproximadamente linear em um gráfico log-log
Na China, é preciso chegar até a 106ª posição antes de aparecer uma cidade com menos de 1 milhão de habitantes. Nos EUA, há apenas 9 cidades desse tipo
Acabei de verificar a Índia: há 46 cidades com mais de 1 milhão de habitantes; Malegaon, na 100ª posição, tem 471 mil habitantes, e Aurangabad, na 300ª, ainda passa de 100 mil
Dito isso, “cidade” é uma definição bastante arbitrária. Algumas das maiores cidades do mundo, pelos critérios de outros países, poderiam corresponder a regiões metropolitanas, ou até mesmo a estados ou províncias
As maiores cidades por área, por outro lado, têm populações muito pequenas. Sermersooq, na Groenlândia, tem 24.148 habitantes e área de 575.300 km², cerca de 144 vezes Rhode Island; entre os estados dos EUA, só Texas e Alaska são maiores. Mesmo Alaska é apenas cerca de 12% maior
Geografia urbana é uma área complexa, por isso normalmente compara várias escalas e definições em conjunto, como regiões estatísticas metropolitanas, área urbana e população. Isso ajuda a reduzir a arbitrariedade das fronteiras políticas e a refletir melhor a população total e a influência econômica
É bastante surpreendente que o tamanho do arquivo seja esse mesmo com fronteiras tão grosseiras
Parece que o tamanho total dos dados está bem abaixo do ponto de equilíbrio entre utilidade e tamanho do arquivo. Por exemplo, mesmo que fosse duas vezes maior, as fronteiras provavelmente não seriam tão irregulares
Pela descrição de que “a versão completa contém todos os dados, exceto fronteiras e litorais, e isso reduz o tamanho em 200 KB”, cerca de 29% são dados de fronteiras e litorais, e 71% são nomes e localizações de cidades
Pessoalmente, acho que seria possível remover muitas cidades. Especialmente as cidades sobrepostas entre si, que só aparecem quando se dá zoom suficiente para ver a massa de terra cinza e os nomes das cidades; em vez disso, seria melhor tornar o litoral mais preciso
Também não sei com que frequência é necessário ter a localização em um mapa-múndi geral. Por exemplo, no site de um ponto de interesse que estou vendo agora, não seria mais comum precisar de um mapa leve com as rodovias e linhas de transporte público ao redor para chegar até lá?
Se fosse criada uma versão que dividisse toda a Terra em unidades de alguns km², acho que daria para incluir detalhes bastante úteis com um décimo do tamanho. Um mapa global de poucos polígonos também teria usos, como rastreamento da Estação Espacial Internacional, mas isso parece muito mais raro
Mesmo que a população seja menor que 40 mil habitantes, capitais devem ser incluídas obrigatoriamente e marcadas com uma estrela de alguma forma
Muito legal. É impressionante ver carregar tão rápido no celular
A ideia de compactar dados espaciais como Paths é muito boa
Para evitar a licença ODbL, talvez seja melhor usar dados do Natural Earth em vez do OSM
Seria ótimo também incluir uma ferramenta para converter dados espaciais em Paths