- Ferramenta open source baseada em Python capaz de gerar mapas de cidades do mundo todo como pôsteres artísticos minimalistas
- Usa dados do OpenStreetMap (OSMnx) para visualizar elementos geográficos como vias, cursos d'água e parques, com renderização em matplotlib
- Oferece 17 estilos de tema (ex.: neon_cyberpunk, blueprint, japanese_ink etc.) e permite adicionar temas personalizados por meio de arquivos JSON
- Pela linha de comando, é possível definir nome da cidade, país, raio e tema para gerar e salvar o pôster automaticamente
- Ferramenta que permite a desenvolvedores e designers explorar a estrutura urbana de forma artística por meio da combinação entre design e visualização de dados
Visão geral do projeto
- MapToPoster é um script em Python que gera pôsteres com design minimalista com base no mapa de uma cidade definida pelo usuário
- Os pôsteres gerados são salvos automaticamente no diretório
posters/
- Publicado sob licença MIT, permitindo modificação e distribuição livremente
- O repositório conta com cerca de 2,7 mil Stars e 164 Forks
Principais recursos
- Geração de pôsteres pela interface de linha de comando (CLI), informando nome da cidade (
--city), país (--country), tema (--theme) e distância (--distance)
- A opção
--list-themes permite ver a lista de todos os temas disponíveis
- O valor de distância (
distance) ajuda a definir o raio adequado conforme o porte da cidade
- 4.000–6.000 m: cidade pequena
- 8.000–12.000 m: cidade média
- 15.000–20.000 m: metrópole
Configuração de temas
- O diretório
themes/ inclui 17 arquivos JSON de temas
- Exemplos: noir, blueprint, neon_cyberpunk, warm_beige, forest, terracotta etc.
- Cada tema define propriedades de cor para fundo, vias, água, parques e outros elementos
- O usuário pode adicionar novos temas manualmente em formato JSON
- Ex.:
"bg": "#FFFFFF", "road_primary": "#1A1A1A" etc.
Exemplos de uso
- É possível gerar pôsteres com diferentes combinações de cidade e tema
python create_map_poster.py -c "Tokyo" -C "Japan" -t japanese_ink -d 15000
python create_map_poster.py -c "Barcelona" -C "Spain" -t warm_beige -d 8000
python create_map_poster.py -c "Dubai" -C "UAE" -t midnight_blue -d 15000
- Entre os pôsteres de exemplo estão cidades como San Francisco, Venice, Marrakech e Singapore
Estrutura interna e arquitetura
- Os principais componentes são CLI Parser, Geocoding (Nominatim), Data Fetching (OSMnx) e Rendering (matplotlib)
- A ordem de renderização (z-order) é fundo → água → parques → vias → gradiente → texto
- Funções principais
get_coordinates(): consulta latitude e longitude pelo nome da cidade
create_poster(): pipeline completo de renderização
get_edge_colors_by_type(): define cores por tipo de via
get_edge_widths_by_type(): define espessuras conforme a importância da via
load_theme(): carrega o tema JSON
Expansão e customização
- Para adicionar novas camadas de mapa (ex.: ferrovia), é possível carregar dados do OSMnx e renderizá-los dentro de
create_poster()
- Ao adicionar novas propriedades de tema, é preciso defini-las tanto no JSON quanto no código (
load_theme())
- Regras de posicionamento de texto
- Nome da cidade: y=0.14
- Nome do país: y=0.10
- Coordenadas: y=0.07
- Créditos da fonte: y=0.02
Dicas de otimização de desempenho
- Se o valor de
dist for superior a 20 km, a velocidade de download cai e o uso de memória aumenta
- Cache de coordenadas ajuda a evitar limites de requisição do Nominatim
- Definir
network_type='drive' melhora a velocidade de renderização
- Para pré-visualizações rápidas, é possível reduzir o
dpi para 150
Stack técnica e licença
- Escrito 100% em Python
- Bibliotecas principais: OSMnx, matplotlib, argparse
- Distribuído sob a MIT License, permitindo uso comercial e modificações
Resumo
- MapToPoster é um ferramenta baseada em código para transformar mapas urbanos em arte, unindo visualização de dados e design em um projeto open source
- É uma ferramenta útil para desenvolvedores, designers e especialistas em visualização de dados explorarem a estrutura urbana em forma artística
3 comentários
Experimentei fazer uma versão de Seul/Busan e, como ficou legal, deixei anexada na conta do GeekNews no Twitter.
Seul : https://x.com/GeekNewsHada/status/2013410000031395905
Busan : https://x.com/GeekNewsHada/status/2013412083749265695
O
city-roadsmencionado nos comentários do Hacker News também já apareceu aqui antes.Comentários do Hacker News
É o city-roads (GitHub), que oferece saída em SVG e também pode ser testado direto online
O criador, Anvaka, também faz vários outros ótimos projetos de visualização de dados
Só que ajustar os parâmetros das ruas é um pouco complicado
Como ideia de melhoria, seria bom aceitar coordenadas em vez do nome da cidade para definir um ponto específico como centro, além de permitir gerar vários estilos de uma vez para escolher visualmente
De qualquer forma, é um excelente trabalho
Não parece UTM, e sim algo como uma projeção esférica global, o que não é adequado para renderização local
A ausência de menção à projeção no README parece um pouco suspeita
Além disso, é open source, então talvez valha a pena aproveitar sua experiência com cartografia e propor uma melhoria via pull request
Parece que ele provavelmente buscou tiles do OSM e fez um pós-processamento da imagem
O resultado ficou bem bonito
Fico curioso se existe algum motivo específico para PNG ser o padrão
plt.savefig(output_file, format='svg', facecolor=THEME['bg'])Vou adicionar um parâmetro
--formatpara issoMesmo uma cidade de 500 mil habitantes já demora bastante
El-co Color Poster Special
Só dá um pouco mais de trabalho manual
O README pode servir como exemplo de boas práticas em OSS, e o resultado é surpreendentemente bonito
Por exemplo, Salem (OR/MA), Portland (OR/ME), Springfield (IL/MO), Dallas (TX/GA)
Se digitar algo como "Salem, Oregon" ou "Salem, MA", consegue o resultado desejado, e o texto digitado é usado como legenda
Já vi resultados parecidos no Picxstudio, que é uma plataforma de geração de imagens por IA
Assim talvez eu dependesse menos de apps de navegação e pudesse dirigir como antigamente
Há ruas de mão única demais, e a estrutura de porto e túneis é complexa, então aprender as ruas de Sydney é uma tarefa para a vida toda