9 pontos por GN⁺ 2026-01-19 | 3 comentários | Compartilhar no WhatsApp
  • 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

 
xguru 2026-01-20

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

 
kunggom 2026-01-20
 
GN⁺ 2026-01-19
Comentários do Hacker News
  • Há um projeto relacionado que já usei várias vezes
    É 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
  • Projeto realmente muito legal
    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
  • A imagem de São Francisco é bonita, mas em algumas amostras parece haver um problema de projeção
    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
    • Como isso é um projeto artístico para criar pôsteres divertidos e artísticos, a projeção não é tão importante
      Além disso, é open source, então talvez valha a pena aproveitar sua experiência com cartografia e propor uma melhoria via pull request
    • A imagem final tem um efeito de vinheta, dando a impressão de que as bordas desaparecem suavemente
      Parece que ele provavelmente buscou tiles do OSM e fez um pós-processamento da imagem
      O resultado ficou bem bonito
  • Dei uma olhada rápida no código, e com matplotlib parece que seria possível ter saída em SVG com poucas mudanças
    Fico curioso se existe algum motivo específico para PNG ser o padrão
    • Boa observação. Dá para resolver com plt.savefig(output_file, format='svg', facecolor=THEME['bg'])
      Vou adicionar um parâmetro --format para isso
    • Ao exportar cidades grandes para PDF/SVG, a velocidade fica muito lenta
      Mesmo uma cidade de 500 mil habitantes já demora bastante
  • Fico curioso sobre qual seria a melhor forma de realmente imprimir isso como pôster
    • A El-co Color, em Nova Jersey, imprime pôsteres de 20x30 polegadas por um preço acessível
      El-co Color Poster Special
    • Antigamente também existia um serviço que transformava esse tipo de mapa em um mapa em relevo impresso em 3D e colocava em moldura
    • Eu uso Vistaprint. Não comparei tanto assim, mas o preço e a qualidade são bons
    • Se quiser fazer você mesmo, dá para usar Rasterbator.net para montar um pôster DIY juntando várias folhas
      Só dá um pouco mais de trabalho manual
    • Nos EUA, a qualidade de impressão da Staples foi bem boa
  • Este repositório é realmente excelente
    O README pode servir como exemplo de boas práticas em OSS, e o resultado é surpreendentemente bonito
  • Vale a pena dar uma olhada também no prettymapp
  • Fico curioso sobre o que acontece quando há várias cidades com o mesmo nome
    Por exemplo, Salem (OR/MA), Portland (OR/ME), Springfield (IL/MO), Dallas (TX/GA)
    • Se você digitar apenas "Salem", ele escolhe uma cidade arbitrariamente
      Se digitar algo como "Salem, Oregon" ou "Salem, MA", consegue o resultado desejado, e o texto digitado é usado como legenda
    • Nos EUA há muitas cidades com nomes de cidades famosas do mundo, como Paris, London e Athens
    • Nem tinha pensado nisso. Provavelmente vou precisar adicionar um recurso para receber o país também
  • Fico curioso se este projeto usa uma abordagem baseada em grafos ou se é uma geração de imagem mais genérica
    Já vi resultados parecidos no Picxstudio, que é uma plataforma de geração de imagens por IA
  • Eu queria transformar um mapa rodoviário de Sydney em um quebra-cabeça para aprender a malha viária brincando
    Assim talvez eu dependesse menos de apps de navegação e pudesse dirigir como antigamente
    • Existe um motivo para o Where 2, em Sydney, ter evoluído para o Google Maps
      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