- Dünya genelindeki şehir haritalarını minimalist sanat posterleri olarak üretebilen, Python tabanlı açık kaynaklı bir araç
- OpenStreetMap(OSMnx) verilerini kullanarak yollar, su yolları, parklar gibi coğrafi öğeleri görselleştirir ve matplotlib ile render eder
- 17 farklı tema stili (ör. neon_cyberpunk, blueprint, japanese_ink vb.) sunar; JSON dosyalarıyla özel tema eklemek mümkündür
- Komut satırından şehir adı, ülke adı, yarıçap ve tema belirtilerek otomatik poster oluşturma ve kaydetme yapılabilir
- Tasarım ile veri görselleştirmenin birleşimi sayesinde geliştiricilerin ve tasarımcıların şehir yapısını sanatsal biçimde keşfetmesini sağlayan bir araç
Proje Genel Bakış
- MapToPoster, kullanıcının belirlediği bir şehrin haritasını temel alarak minimalist tasarımlı posterler oluşturan bir Python betiği
- Oluşturulan posterler otomatik olarak
posters/ dizinine kaydedilir
- MIT lisansı ile yayımlandığı için serbestçe değiştirilebilir ve dağıtılabilir
- Depo yaklaşık 2.7k Star ve 164 Fork barındırıyor
Başlıca Özellikler
- Komut satırı arayüzü (CLI) üzerinden şehir adı (
--city), ülke adı (--country), tema (--theme), mesafe (--distance) girilerek poster oluşturma
--list-themes seçeneği ile kullanılabilir tüm tema listesini görüntüleme
- Mesafe (
distance) değerine göre şehir ölçeğine uygun yarıçap belirleme
- 4,000–6,000m: küçük şehirler
- 8,000–12,000m: orta ölçekli şehirler
- 15,000–20,000m: büyük şehirler
Tema Yapısı
themes/ dizininde 17 tema JSON dosyası bulunur
- Örnekler: noir, blueprint, neon_cyberpunk, warm_beige, forest, terracotta vb.
- Her tema; arka plan rengi, yol renkleri, su yüzeyleri, parklar gibi renk özelliklerini tanımlar
- Kullanıcılar JSON biçiminde yeni temaları doğrudan ekleyebilir
- Örn:
"bg": "#FFFFFF", "road_primary": "#1A1A1A" vb.
Kullanım Örnekleri
- Farklı şehir ve tema kombinasyonlarıyla poster üretilebilir
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
- Örnek posterler arasında San Francisco, Venice, Marrakech, Singapore gibi şehirler yer alır
İç Yapı ve Mimari
- Başlıca bileşenler: CLI Parser, Geocoding(Nominatim), Data Fetching(OSMnx), Rendering(matplotlib)
- Render sırası (z-order): arka plan → su yüzeyleri → parklar → yollar → gradyan → metin
- Ana işlevler
get_coordinates(): şehir adına göre enlem-boylam sorgulama
create_poster(): uçtan uca render hattı
get_edge_colors_by_type(): yol türüne göre renk belirleme
get_edge_widths_by_type(): yol önem derecesine göre kalınlık ayarlama
load_theme(): JSON teması yükleme
Genişletme ve Özelleştirme
- Yeni harita katmanları (ör. demiryolu) eklemek için
create_poster() içinde OSMnx verileri alınarak render edilebilir
- Yeni tema özellikleri eklenirse hem JSON tarafında hem de kodda (
load_theme()) tanımlanması gerekir
- Metin yerleşim kuralları
- Şehir adı: y=0.14
- Ülke adı: y=0.10
- Koordinatlar: y=0.07
- Kaynak bilgisi: y=0.02
Performans Optimizasyonu İpuçları
dist değeri 20 km ve üzerindeyse indirme hızı düşebilir ve bellek kullanımı artabilir
- Koordinat önbellekleme ile Nominatim istek sınırlarından kaçınılabilir
network_type='drive' ayarı render hızını artırır
- Hızlı önizleme için
dpi değeri 150'ye düşürülebilir
Teknoloji Yığını ve Lisans
- %100 Python ile yazılmıştır
- Başlıca kütüphaneler: OSMnx, matplotlib, argparse
- MIT License ile dağıtılır; ticari kullanım ve değişiklik mümkündür
Özet
- MapToPoster, veri görselleştirme ile tasarımı birleştiren, kod tabanlı bir şehir haritası sanatsallaştırma aracı olan açık kaynaklı bir projedir
- Geliştiriciler, tasarımcılar ve veri görselleştirme uzmanları için şehir yapısını sanatsal bir biçimde keşfetmeye yardımcı olan kullanışlı bir araç
3 yorum
Seul/Busan tarafı için birer tane denedim; güzel olduğu için GeekNews Twitter hesabına ekledim.
Seul : https://x.com/GeekNewsHada/status/2013410000031395905
Busan : https://x.com/GeekNewsHada/status/2013412083749265695
Hacker News tarafındaki görüşlerde bahsedilen city-roads da daha önce burada paylaşılmıştı.
Hacker News yorumları
city-roads (GitHub); SVG çıktısı destekliyor ve doğrudan çevrimiçi olarak da denenebiliyor
Yapımcısı Anvaka ayrıca başka harika veri görselleştirme projeleri de yapıyor
Yalnız sokak parametrelerini ayarlamak biraz zor
İyileştirme fikri olarak, şehir adı yerine koordinat girişi alıp belirli bir noktayı merkeze ayarlayabilmesi ve birden fazla stili tek seferde üretip görsel olarak seçebilme özelliği olabilir
Her hâlükârda müthiş bir çalışma
UTM yerine küresel bir küre projeksiyonu gibi duruyor; bu da yerel render için uygun değil
README'de projeksiyondan bahsedilmemesi biraz şüpheli
Üstelik açık kaynak; harita üretimi deneyimini kullanıp bir pull request ile iyileştirme önermeyi deneyebilirsin
Muhtemelen OSM tile'ları alınıp sonradan görüntü işleme uygulanmış
Sonuç oldukça hoş
PNG'nin varsayılan olmasının özel bir nedeni var mı diye merak ettim
plt.savefig(output_file, format='svg', facecolor=THEME['bg'])ile çözülebilirBunu yansıtmak için
--formatparametresini eklemeyi planlıyorumNüfusu 500 bin olan tek bir şehir bile inanılmaz uzun sürüyor
El-co Color Poster Special
Ama biraz emek istiyor
README, açık kaynak yazılım için örnek alınacak bir uygulama sayılabilir ve ortaya çıkan işler şaşırtıcı derecede güzel
Örneğin Salem (OR/MA), Portland (OR/ME), Springfield (IL/MO), Dallas (TX/GA) gibi
"Salem, Oregon" veya "Salem, MA" gibi yazarsan istediğin sonucu alabiliyorsun ve girilen metin başlık yazısı olarak kullanılıyor
Picxstudio'da da benzer sonuçlar görmüştüm; orası bir yapay zeka görüntü üretim platformu
Böylece navigasyon uygulamalarına daha az bağımlı olup eski usul bir sürücü olabilirim diye düşünüyordum
Tek yönlü yollar çok fazla ve limanla tünel yapısı o kadar karmaşık ki, Sidney yollarını öğrenmek ömürlük bir uğraş