MapToPoster - शहर के नक्शों को कलात्मक पोस्टरों में बदलना
(github.com/originalankur)- दुनिया भर के शहरों के नक्शों को मिनिमल आर्ट पोस्टर के रूप में बनाने वाला Python-आधारित ओपन सोर्स टूल
- OpenStreetMap(OSMnx) डेटा का उपयोग करके सड़कों, जलमार्गों, पार्कों जैसी भौगोलिक विशेषताओं को विज़ुअलाइज़ करता है, और matplotlib से रेंडर करता है
- 17 तरह के थीम स्टाइल (जैसे: neon_cyberpunk, blueprint, japanese_ink) देता है, और JSON फ़ाइलों के जरिए कस्टम थीम जोड़ने की सुविधा भी है
- कमांड लाइन से शहर का नाम, देश का नाम, radius और theme देकर अपने-आप पोस्टर बनाता और सेव करता है
- डिज़ाइन और डेटा विज़ुअलाइज़ेशन के संयोजन के जरिए डेवलपर और डिज़ाइनर शहरों की संरचना को कलात्मक तरीके से एक्सप्लोर कर सकते हैं
परियोजना अवलोकन
- MapToPoster एक Python स्क्रिप्ट है जो उपयोगकर्ता द्वारा चुने गए शहर के नक्शे के आधार पर मिनिमल डिज़ाइन पोस्टर बनाती है
- बना हुआ पोस्टर अपने-आप
posters/डायरेक्टरी में सेव हो जाता है - MIT लाइसेंस के तहत जारी होने के कारण इसे स्वतंत्र रूप से संशोधित और वितरित किया जा सकता है
- बना हुआ पोस्टर अपने-आप
- रिपॉज़िटरी पर लगभग 2.7k Star और 164 Fork हैं
मुख्य फीचर
- कमांड-लाइन इंटरफ़ेस (CLI) के जरिए शहर का नाम (
--city), देश का नाम (--country), theme (--theme), दूरी (--distance) देकर पोस्टर बनाया जा सकता है --list-themesविकल्प से उपलब्ध सभी themes की सूची देखी जा सकती है- दूरी (
distance) के मान के अनुसार शहर के आकार के हिसाब से उपयुक्त radius तय किया जा सकता है- 4,000–6,000m: छोटे शहर
- 8,000–12,000m: मध्यम आकार के शहर
- 15,000–20,000m: महानगर
थीम संरचना
themes/डायरेक्टरी में 17 theme JSON फ़ाइलें शामिल हैं- उदाहरण: noir, blueprint, neon_cyberpunk, warm_beige, forest, terracotta आदि
- हर theme में background color, road color, water, park आदि के color properties तय किए जाते हैं
- उपयोगकर्ता JSON फ़ॉर्मैट में नई theme सीधे जोड़ सकते हैं
- उदाहरण:
"bg": "#FFFFFF","road_primary": "#1A1A1A"आदि
- उदाहरण:
उपयोग उदाहरण
- अलग-अलग शहरों और themes के संयोजन से पोस्टर बनाए जा सकते हैं
python create_map_poster.py -c "Tokyo" -C "Japan" -t japanese_ink -d 15000python create_map_poster.py -c "Barcelona" -C "Spain" -t warm_beige -d 8000python create_map_poster.py -c "Dubai" -C "UAE" -t midnight_blue -d 15000
- उदाहरण पोस्टरों में San Francisco, Venice, Marrakech, Singapore जैसे शहर शामिल हैं
आंतरिक संरचना और आर्किटेक्चर
- मुख्य घटक हैं CLI Parser, Geocoding(Nominatim), Data Fetching(OSMnx), Rendering(matplotlib)
- रेंडरिंग क्रम (z-order): background → water → park → road → gradient → text
- प्रमुख फ़ंक्शन
get_coordinates(): शहर के नाम से latitude/longitude प्राप्त करनाcreate_poster(): पूरा rendering pipelineget_edge_colors_by_type(): सड़क के प्रकार के अनुसार रंग तय करनाget_edge_widths_by_type(): सड़क की महत्ता के अनुसार चौड़ाई तय करनाload_theme(): JSON theme लोड करना
विस्तार और कस्टमाइज़ेशन
- नई map layer (जैसे: railway) जोड़ने के लिए
create_poster()के भीतर OSMnx डेटा लाकर रेंडर किया जा सकता है - नई theme property जोड़ने पर JSON और code (
load_theme()) दोनों में उसकी परिभाषा देनी होगी - टेक्स्ट प्लेसमेंट नियम
- शहर का नाम: y=0.14
- देश का नाम: y=0.10
- निर्देशांक: y=0.07
- स्रोत उल्लेख: y=0.02
परफ़ॉर्मेंस ऑप्टिमाइज़ेशन टिप्स
distमान 20km से अधिक होने पर डाउनलोड गति धीमी हो सकती है और memory उपयोग बढ़ सकता है- coordinate caching से Nominatim request limit से बचा जा सकता है
network_type='drive'सेट करने पर rendering speed बेहतर होती है- तेज़ preview के लिए
dpiको 150 तक कम किया जा सकता है
टेक स्टैक और लाइसेंस
- Python 100% में लिखा गया है
- मुख्य लाइब्रेरी: OSMnx, matplotlib, argparse
- MIT License के तहत वितरित, व्यावसायिक उपयोग और संशोधन संभव
सारांश
- MapToPoster एक code-आधारित city-map art tool है, जो data visualization और design को जोड़ने वाला ओपन सोर्स प्रोजेक्ट है
- डेवलपर, डिज़ाइनर और data visualization विशेषज्ञों के लिए शहरों की संरचना को कलात्मक रूप में समझने का उपयोगी टूल
3 टिप्पणियां
Hacker News की तरफ़ की टिप्पणियों में ज़िक्र किया गया city-roads भी पहले यहाँ पोस्ट हो चुका था.
मैंने Seoul/Busan वाली दिशा में एक बार बनाकर देखा, और अच्छा लगा, इसलिए उसे Twitter GeekNews अकाउंट पर अटैच कर दिया है.
Seoul : https://x.com/GeekNewsHada/status/2013410000031395905
Busan : https://x.com/GeekNewsHada/status/2013412083749265695
Hacker News टिप्पणियाँ
city-roads (GitHub) भी ऐसा ही है, और यह SVG output को सपोर्ट करता है तथा इसे ऑनलाइन भी तुरंत आज़माया जा सकता है
इसके निर्माता Anvaka ने कई और शानदार data visualization projects भी बनाए हैं
बस street parameters को adjust करना थोड़ा मुश्किल है
सुधार के लिए एक विचार यह है कि शहर के नाम की जगह coordinates input लिया जाए ताकि किसी खास बिंदु को केंद्र बनाकर सेट किया जा सके, और कई styles को एक साथ output किया जाए ताकि उन्हें देखकर चुना जा सके
कुल मिलाकर यह बेहतरीन काम है
यह UTM की बजाय किसी global spherical projection जैसा लगता है, इसलिए local rendering के लिए उपयुक्त नहीं है
README में projection का उल्लेख न होना थोड़ा संदेह पैदा करता है
यह open source भी है, इसलिए अपने mapping experience का उपयोग करके pull request के ज़रिए सुधार का सुझाव देना अच्छा रहेगा
शायद इसने OSM tiles लेकर image post-processing की है
नतीजा काफ़ी सुंदर है
यह जानने की जिज्ञासा है कि PNG को default रखने की कोई खास वजह है क्या
plt.savefig(output_file, format='svg', facecolor=THEME['bg'])से यह हल हो सकता हैइसे लागू करने के लिए
--formatparameter जोड़ने वाला हूँ5 लाख की आबादी वाले शहर में भी बहुत ज़्यादा समय लगता है
El-co Color Poster Special
हालांकि इसमें काफ़ी मेहनत लगती है
README को OSS best practices का उदाहरण माना जा सकता है, और इसका output हैरान कर देने वाला सुंदर है
जैसे Salem(OR/MA), Portland(OR/ME), Springfield(IL/MO), Dallas(TX/GA)
"Salem, Oregon" या "Salem, MA" जैसे input देने पर मनचाहा result मिलता है, और डाला गया text caption के रूप में इस्तेमाल होता है
Picxstudio पर भी मैंने ऐसा ही output देखा है, लेकिन वह AI image generation platform है
ऐसा करने से शायद navigation apps पर निर्भरता कम हो जाए और मैं पुराने ज़माने के ड्राइवर जैसा बन सकूँ
वहाँ one-way roads बहुत ज़्यादा हैं, और harbor व tunnels की संरचना जटिल है, इसलिए Sydney की सड़कों को समझना जीवनभर का काम है