- Alat open-source berbasis Python untuk membuat peta kota di seluruh dunia menjadi poster seni minimalis
- Memanfaatkan data OpenStreetMap (OSMnx) untuk memvisualisasikan elemen geografis seperti jalan, jalur air, dan taman, lalu merendernya dengan matplotlib
- Menyediakan 17 gaya tema (misalnya neon_cyberpunk, blueprint, japanese_ink) dan memungkinkan penambahan tema kustom melalui file JSON
- Dari command line, pengguna dapat menentukan nama kota, nama negara, radius, dan tema untuk secara otomatis membuat dan menyimpan poster
- Alat yang memungkinkan developer dan desainer menjelajahi struktur kota secara artistik melalui gabungan desain dan visualisasi data
Gambaran proyek
- MapToPoster adalah skrip Python yang membuat poster desain minimalis berdasarkan peta kota yang ditentukan pengguna
- Poster yang dihasilkan otomatis disimpan ke direktori
posters/
- Dirilis dengan lisensi MIT sehingga bebas dimodifikasi dan didistribusikan
- Repositori ini memiliki sekitar 2.7k Star dan 164 Fork
Fitur utama
- Membuat poster melalui antarmuka command line (CLI) dengan memasukkan nama kota (
--city), nama negara (--country), tema (--theme), dan jarak (--distance)
- Opsi
--list-themes memungkinkan pengguna melihat daftar semua tema yang tersedia
- Nilai jarak (
distance) dapat disesuaikan untuk skala kota yang berbeda
- 4,000–6,000m: kota kecil
- 8,000–12,000m: kota menengah
- 15,000–20,000m: kota besar
Konfigurasi tema
- Direktori
themes/ berisi 17 file JSON tema
- Contoh: noir, blueprint, neon_cyberpunk, warm_beige, forest, terracotta dan lainnya
- Setiap tema mendefinisikan properti warna seperti warna latar belakang, warna jalan, perairan, dan taman
- Pengguna dapat menambahkan tema baru sendiri dalam format JSON
- Contoh:
"bg": "#FFFFFF", "road_primary": "#1A1A1A" dan lainnya
Contoh penggunaan
- Poster dapat dibuat dengan berbagai kombinasi kota dan 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
- Contoh poster mencakup kota seperti San Francisco, Venice, Marrakech, dan Singapore
Struktur internal dan arsitektur
- Komponen utamanya mencakup CLI Parser, Geocoding (Nominatim), Data Fetching (OSMnx), dan Rendering (matplotlib)
- Urutan rendering (z-order) adalah latar belakang → perairan → taman → jalan → gradasi → teks
- Fungsi utama
get_coordinates(): mencari latitude dan longitude berdasarkan nama kota
create_poster(): pipeline rendering keseluruhan
get_edge_colors_by_type(): menentukan warna berdasarkan tipe jalan
get_edge_widths_by_type(): mengatur ketebalan berdasarkan tingkat kepentingan jalan
load_theme(): memuat tema JSON
Ekstensi dan kustomisasi
- Untuk menambahkan layer peta baru (misalnya rel kereta), data OSMnx dapat dimuat dan dirender di dalam
create_poster()
- Jika menambahkan properti tema baru, definisinya harus ditambahkan baik di JSON maupun di kode (
load_theme())
- Aturan penempatan teks
- Nama kota: y=0.14
- Nama negara: y=0.10
- Koordinat: y=0.07
- Keterangan sumber: y=0.02
Tips optimasi performa
- Jika nilai
dist melebihi 20km, kecepatan unduh menurun dan penggunaan memori meningkat
- Caching koordinat membantu menghindari batas permintaan Nominatim
- Pengaturan
network_type='drive' dapat meningkatkan kecepatan rendering
- Untuk preview cepat,
dpi dapat diturunkan menjadi 150
Tech stack dan lisensi
- Ditulis 100% dengan Python
- Library utama: OSMnx, matplotlib, argparse
- Didistribusikan dengan MIT License, memungkinkan penggunaan komersial dan modifikasi
Ringkasan
- MapToPoster adalah alat seni peta kota berbasis kode yang menggabungkan visualisasi data dan desain dalam sebuah proyek open-source
- Alat yang berguna bagi developer, desainer, dan praktisi visualisasi data untuk menjelajahi struktur kota dalam bentuk artistik
3 komentar
Saya sempat membuat versi area Seoul/Busan, dan hasilnya cukup bagus jadi saya lampirkan di akun Twitter GeekNews.
Seoul: https://x.com/GeekNewsHada/status/2013410000031395905
Busan: https://x.com/GeekNewsHada/status/2013412083749265695
City Roads yang disebut dalam opini di pihak Hacker News juga pernah diposting di sini sebelumnya.
Komentar Hacker News
yaitu city-roads (GitHub), yang mendukung output SVG dan bisa langsung dicoba secara online
Pembuatnya, Anvaka, juga membuat banyak proyek visualisasi data keren lainnya
Hanya saja, menyesuaikan parameter jalan agak sedikit rumit
Ide perbaikannya antara lain menerima input koordinat alih-alih nama kota agar bisa dipusatkan pada titik tertentu, lalu fitur untuk menghasilkan beberapa gaya sekaligus supaya bisa dipilih secara visual
Bagaimanapun juga, ini pekerjaan yang luar biasa
Kelihatannya seperti proyeksi bola global, bukan UTM, jadi kurang cocok untuk rendering area lokal
Agak mencurigakan karena tidak ada penyebutan projection di README
Karena ini juga open source, akan bagus kalau pengalaman membuat peta itu dipakai untuk mengusulkan perbaikan lewat pull request
Sepertinya mereka mengambil tile OSM lalu melakukan pascapemrosesan gambar
Hasilnya cukup keren
Saya penasaran apakah ada alasan khusus kenapa PNG dijadikan default
plt.savefig(output_file, format='svg', facecolor=THEME['bg'])Saya berencana menambahkan parameter
--formatuntuk menerapkannyaBahkan untuk satu kota berpenduduk 500 ribu saja butuh waktu sangat lama
El-co Color Poster Special
Hanya saja cukup merepotkan
README-nya layak dijadikan contoh praktik terbaik OSS, dan hasilnya sangat indah sampai mengejutkan
Misalnya Salem (OR/MA), Portland (OR/ME), Springfield (IL/MO), atau Dallas (TX/GA)
Kalau memasukkan "Salem, Oregon" atau "Salem, MA", Anda bisa mendapatkan hasil yang diinginkan, dan teks yang dimasukkan akan dipakai sebagai caption
Saya pernah melihat hasil serupa di Picxstudio, yang merupakan platform generasi gambar AI
Dengan begitu, mungkin saya bisa lebih tidak bergantung pada aplikasi navigasi dan jadi pengemudi gaya lama lagi
Jalan satu arah terlalu banyak, dan struktur pelabuhan serta terowongannya rumit, jadi memahami jalan-jalan Sydney adalah tugas seumur hidup