- tinyworldmap ऑफलाइन-फर्स्ट और लो-बैंडविड्थ web apps के लिए एक world map है, जिसे Leaflet के साथ इस्तेमाल करने के लिए डिज़ाइन किया गया है
- यह सभी zoom levels को support करता है, और इसका सबसे पूर्ण संस्करण gzip 450KB है; client rendering को profile और test किया गया है ताकि 10 साल पुराने low-end phones पर भी कोई महसूस होने वाली latency न हो
- डिफ़ॉल्ट map में OpenStreetMap में जोड़े गए जनसंख्या के हिसाब से शीर्ष 10,000 शहर दिखते हैं, और लेखन के समय के अनुसार इसमें 48,000 या अधिक आबादी वाले शहर और कस्बे शामिल हैं
- इसे इस्तेमाल करने के दो तरीके हैं: OpenStreetMap tiles की जगह लेने वाला basemap, या offline स्थिति में OSM tile requests को locally generated tiles में बदलने वाला fallback map
- map data, OpenStreetMap की तरह, ODBL लाइसेंस का पालन करता है, और Leaflet footer आदि में OpenStreetMap तथा tinyworldmap attribution देना ज़रूरी है
tinyworldmap का उद्देश्य और दायरा
- tinyworldmap ऑफलाइन-फर्स्ट और लो-बैंडविड्थ web apps के लिए एक world map है
- इसे Leaflet के साथ इस्तेमाल करने के लिए डिज़ाइन किया गया है, और यह सभी zoom levels को support करता है
- इसका सबसे पूर्ण संस्करण gzip 450KB है, और unzip करने पर 1.1MB होता है
- client-side rendering को 10 साल पुराने low-end phones पर व्यापक रूप से profile और test किया गया, और कोई महसूस होने वाली latency नहीं थी
- demo यहाँ उपलब्ध हैं: Nightly demo, Stable demo, v3 announcement
डिफ़ॉल्ट map data
- डिफ़ॉल्ट सेटिंग में OpenStreetMap में जोड़े गए जनसंख्या के हिसाब से शीर्ष 10,000 शहर दिखाए जाते हैं
- लेखन के समय के अनुसार, यह दायरा 48,000 या अधिक आबादी वाले सभी शहरों और कस्बों को शामिल करता है
Leaflet में इस्तेमाल के दो तरीके
map styles और custom maps
- constructor
render option स्वीकार करता है, जिससे map का रूप बदला जा सकता है
- हर layer का
style option Canvas के CanvasRenderingContext2D पर लागू होता है
- उदाहरण के लिए,
state_borders layer पर fillStyle सेट करके style बदली जा सकती है
let render = {
state_borders: {
style: {fillStyle: '#f00'}
}
}
new L.GridLayer.TinyWorld({maxZoom: 19, render}).addTo(map)
- अगर किसी संगठन को road maps, city maps, दूसरी भाषाओं के maps, या OSM अथवा non-OSM data वाले custom content maps चाहिए, तो
business@tinyworldmap.com पर quote माँगा जा सकता है
और छोटे map file options
-
boundaries के बिना संस्करण
tiny-world-cities-10000.js(on) में full version के data में से state boundaries, country boundaries और coastlines को छोड़कर बाकी data शामिल है
- यह version gzip के हिसाब से 300KB, और uncompressed के हिसाब से 825KB कम करता है
- boundaries के बिना version का लाभ यह है कि शामिल किया गया सारा data पूरी precision के साथ रहता है
- full version की country boundaries ऊँचे zoom levels पर सटीक नहीं हैं, इसलिए country boundaries या coastlines से मेल खाते shapes overlay करने पर दृश्य अटपटा लग सकता है
- ऐसे मामलों में boundaries के बिना version अक्सर बेहतर दिखता है
-
city labels के बिना संस्करण
- city labels के बिना दो files हैं
tiny-world-borders.js(on): state boundaries को छोड़ता है
tiny-world-nocities.js(on): state boundaries को बनाए रखता है
- city labels uncompressed में 410KB, और compressed में 172KB लेते हैं
-
कम शहरों वाले संस्करण
- city labels शामिल करने वाली files 2,000 और 4,000 cities versions में भी उपलब्ध हैं
- filename में
10000 को 2000 या 4000 से बदलना होता है
- | शामिल शहरों की संख्या | जनसंख्या मानदंड |
- | --- | --- |
- | 10,000 | 48,000 से अधिक |
- | 4,000 | 137,000 से अधिक |
- | 2,000 | 287,000 से अधिक |
लाइसेंस और attribution
- tinyworldmap data, OpenStreetMap data की तरह, ODBL लाइसेंस का पालन करता है
- ODBL attribution की मांग करता है
- अगर इसे बताए गए तरीके से configure किया गया है, तो Leaflet footer में OpenStreetMap और tinyworldmap attribution शामिल होना चाहिए
- अन्यथा, OpenStreetMap और tinyworldmap attribution अलग से जोड़ना होगा
1 टिप्पणियां
Hacker News की राय
आइडिया पसंद आया। यह उस समस्या को हल करता है कि बहुत ज़्यादा zoom out करने पर अभी-अभी माँगी गई continent tile को server render करे तब तक इंतज़ार करना पड़ता है
लेकिन यह समझ नहीं आता कि ऐसा कौन-सा use case है जहाँ किसी को Detroit के suburb West Bloomfield Township और Waterford Charter Township की relative position तो पता हो, लेकिन यह न पता हो कि वे किस state में हैं या Great Lakes मौजूद हैं
coastlines पर काफ़ी ज़्यादा data और metro-area subdivision पर काफ़ी कम data इस्तेमाल करना बेहतर होगा
ये दूसरी संभावित जानकारी को बहुत ज़्यादा ढक देती हैं
अच्छा है, लेकिन coastline detail बहुत कम है। UK के कुछ कस्बे समुद्र के ऊपर तैरते दिख रहे हैं, और दूसरी तरफ़ Greenland और Northern Canada सारे vertices ले रहे हैं
लगता है Mercator projection के हिसाब से detail level पहले से consider किया गया है, लेकिन जहाँ लगभग कोई नहीं रहता वहाँ की priority कम करनी चाहिए
QRank का SQLite DB भी पहले HN पर आया था
[1] https://qrank.wmcloud.org/
[2] https://github.com/hikeratlas/qrank
Netherlands का एक province मुख्य भूभाग से कटा हुआ दिखता है, जैसे वह कोई island हो, जबकि असल में ऐसा नहीं है। लेकिन उस province के अंदर के पाँच शहरों के नाम दिए गए हैं, जिनमें से कुछ लगभग एक-दूसरे पर चढ़े हुए हैं
दूसरी तरफ़ Afsluitdijk को शामिल करना मुझे व्यक्तिगत रूप से अनावश्यक detail लगता है, लेकिन यह समझ आता है कि कौन-सी landmass खींचनी है और साधारण maritime infrastructure क्या है, इसे programmatically अलग करना मुश्किल है
issue tracker में ticket खोलना चाहिए, लेकिन mobile पर login नहीं है इसलिए अभी HN comment ही सबसे अच्छा विकल्प है। अगर किसी और को भी ऐसा ही लगता है, तो इस comment के आधार पर ratio adjustment, शहरों के बीच minimum distance, या पूरे file size को घटाने जैसी सुधार-सुझाव दिए जा सकते हैं
French Polynesia तो map पर है ही नहीं
शुरू में ऐसा इसलिए नहीं किया गया था क्योंकि पुराने phones, खासकर Firefox for Android में, बहुत सारे polygons draw करते समय crash हो सकते थे। बाद में drawing procedure optimize किया गया, लेकिन फिर भी सावधानी ज़रूरी है
[1] https://tinyworldmap.com/beta.html
यह तो बुनियादी quality control में पकड़ में आना चाहिए
मैंने भी कुछ ऐसा ही बनाया था। यह offline-first, बहुत छोटा, vector-based है, और फ़ोकस internationalization पर था
यह UN की सभी भाषाओं में उपलब्ध है। लेकिन Spanish सिर्फ़ भूल जाने की वजह से छूट गई, जबकि उसे कुछ घंटों में जोड़ा जा सकता था, और यह शर्म की बात है
देशों और शहरों के नाम UN में दर्ज आधिकारिक नामों से लिए गए हैं। इसलिए UK का आधिकारिक short name “United Kingdom of Great Britain and Northern Ireland” है
https://map.ache.one/en
हल्का map बनाना और internationalization संभालना तुलनात्मक रूप से आसान था, क्योंकि public data sources और libraries कई हैं
असली मुश्किल हिस्सा पूरी तरह administrative definitions है। ज़्यादातर देशों से जुड़े data के साथ map source का कहीं-न-कहीं mismatch ज़रूर होगा, और आख़िर में ख़ुद custom map बनाना पड़ता है
“देश” क्या है, इस पर कोई सहमति नहीं है। Western Sahara आधिकारिक रूप से देश है, लेकिन व्यवहार में Morocco ने लगातार उस पर क़ब्ज़ा बनाए रखा है; Somalia में Somaliland और Puntland वास्तविक रूप से स्वतंत्र देशों की तरह चलते हैं, लेकिन उन्हें औपचारिक मान्यता नहीं है। Greenland, Niue वगैरह इनके बीच कहीं आते हैं
देशों के स्तर पर काम करने के अनुभव से कहूँ तो यह गंदे hacks से भरी manual process थी, और यह test करना सबसे कठिन था कि सब ठीक से fit हुआ या नहीं। खासकर सही generalization level और लोग अपने इलाके के map से कैसी उम्मीद रखते हैं, यह मुश्किल हिस्सा है
जानना चाहूँगा कि क्या इस map को काफ़ी बेहतर बनाने में लगने वाली मेहनत वाजिब मानी जाती है
star Dar Es Salaam पर है, लेकिन label Dodoma का है। Dodoma वास्तव में राजधानी है, लेकिन देश के ज़्यादा मध्य भाग में है
काफ़ी प्यारा है। पहले मैंने भी कुछ ऐसा ही बनाया था, हालांकि पूरी तरह वही नहीं
https://web.archive.org/web/20020611095429/http://www.cs.man.ac.uk/~hancockd/CityZen/index.html
20,000 line segments, 3,350 places, viewer और quiz—सब मिलाकर सिर्फ़ 162KB था
फ़ीडबैक के लिए धन्यवाद। चयन की पृष्ठभूमि समझाऊँ तो, हाल तक इस प्रोजेक्ट का मुख्य फ़ोकस देशों के आकार नहीं था
लंबे समय तक README में मौजूद बिना सीमाओं वाला संस्करण ही एकमात्र संस्करण था, और मुझे नहीं लगा था कि पूरी दुनिया जोड़ना संभव होगा। लेकिन यह संभव निकला
fjords को हटाकर और बहुत अनुरोधित द्वीपों को शामिल करते हुए, अन्य जगहों पर और अधिक डिटेल जोड़कर nightly version जारी किया गया है। कुल मिलाकर resolution भी अधिक है
मूल रूप से ऐसा न करने की वजह यह थी कि पुराने फ़ोन, खासकर Firefox for Android में, बहुत सारे polygons ड्रॉ करते समय crash हो सकता था। बाद में drawing प्रक्रिया को optimize किया गया, लेकिन फिर भी सावधानी ज़रूरी है
[1] https://tinyworldmap.com/beta.html
मुझे यक़ीन नहीं है कि जनसंख्या के हिसाब से शीर्ष 10,000 शहर सबसे अच्छा फ़िल्टर है
यह तरीका बड़े देशों के शहरों को प्राथमिकता देगा, और छोटे देशों के ज़्यादातर शहर छूट जाने की संभावना है
हर देश के लिए शीर्ष X शहरों को शामिल करने वाला एक सहायक फ़िल्टर होना चाहिए। तब शायद छोटे देशों के प्रमुख शहर भी शामिल हो सकेंगे
राष्ट्रीय राजधानी, क्षेत्रीय राजधानी, global city, क्षेत्र के भीतर centrality जैसे मानक बुनियादी शर्तों को पूरक करने में उपयोगी हो सकते हैं
इस चर्चा में भूगोलवेत्ता और मानचित्रकार शायद अधिक उपयोगी सलाह दे सकें
दुनिया की सबसे बड़ी 10,000 बस्तियाँ चुनने पर संख्या 48,000 आबादी तक नीचे चली जाती है, यह दिलचस्प लगा
अभी तय नहीं कर पाया हूँ कि यह संख्या चौंकाने वाली है या नहीं
200 तक बढ़ाने पर भी यह अब भी 1 लाख से ऊपर है। Wikipedia के अनुसार #333 पर Daly City, CA की आबादी 100,007 है: <https://en.wikipedia.org/wiki/List_of_United_States_cities_b...>
इस तरह का आकार वितरण, कई अन्य scaling स्थितियों की तरह, log-log ग्राफ़ पर मोटे तौर पर linear के क़रीब होता है
China में 10 लाख से कम आबादी वाले शहर आने से पहले 106वें स्थान तक जाना पड़ता है। अमेरिका में ऐसे सिर्फ़ 9 शहर हैं
India में अभी जाँचकर देखा तो 10 लाख से अधिक आबादी वाले 46 शहर हैं, और 100वें स्थान पर Malegaon 4.71 लाख है, जबकि 300वें स्थान पर Aurangabad भी अब भी 1 लाख से ऊपर है
हालाँकि, “शहर” की परिभाषा बहुत मनमानी है। दुनिया के कुछ सबसे बड़े शहर दूसरे देशों के मानकों के अनुसार metropolitan area, यहाँ तक कि राज्य या प्रांत के बराबर भी हो सकते हैं
क्षेत्रफल के हिसाब से सबसे बड़े शहरों की आबादी उल्टे बहुत कम होती है। Greenland का Sermersooq 24,148 की आबादी और 575,300km² क्षेत्रफल वाला है, जो Rhode Island से लगभग 144 गुना बड़ा है, और अमेरिकी राज्यों में केवल Texas और Alaska ही उससे बड़े हैं। Alaska भी केवल लगभग 12% बड़ा है
शहरी भूगोल एक जटिल क्षेत्र है, इसलिए आम तौर पर metropolitan statistical area, urbanized area, और आबादी जैसी कई scales और definitions की साथ में तुलना की जाती है। इससे राजनीतिक सीमाओं की मनमानी कुछ कम होती है और कुल आबादी तथा आर्थिक प्रभाव बेहतर ढंग से दिखता है
सीमाएँ इतनी खुरदरी होने के बावजूद फ़ाइल का आकार इतना कम है, यह काफ़ी चौंकाने वाला है
लगता है कुल data size उपयोगिता और फ़ाइल आकार के संतुलन बिंदु से काफ़ी नीचे है। उदाहरण के लिए, आकार दोगुना भी होता तो सीमाएँ इतनी ऊबड़-खाबड़ नहीं होतीं
“इसमें सीमाओं और coastlines को छोड़कर पूर्ण संस्करण का सारा data है, और इससे आकार 200KB कम हो जाता है” इस विवरण को देखें तो लगभग 29% हिस्सा सीमा/तटरेखा data है और 71% शहरों के नाम और स्थान हैं
व्यक्तिगत रूप से मुझे लगता है कि कई शहर हटाए जा सकते हैं। खासकर जो शहर एक-दूसरे पर चढ़े हुए हैं, वे तभी दिखते हैं जब इतनी ज़ूम करें कि धूसर landmass और शहरों के नाम पढ़े जा सकें, इसलिए उसकी जगह coastlines को अधिक सटीक बनाना बेहतर होगा
यह भी साफ़ नहीं है कि सामान्य world map पर किसी स्थान की स्थिति कितनी बार ज़रूरी होती है। उदाहरण के लिए, जिस place of interest को अभी देख रहे हैं, उसके लिए वहाँ तक पहुँचने वाली आसपास की highways और public transport routes वाला हल्का नक्शा क्या ज़्यादा बार काम का नहीं होगा
अगर पृथ्वी को कुछ km² इकाइयों में बाँटकर एक संस्करण बनाया जाए, तो शायद दसवें हिस्से के आकार में भी काफ़ी उपयोगी डिटेल रखी जा सकती है। पूरी पृथ्वी का low-poly map International Space Station tracking जैसे उपयोगों के लिए काम आ सकता है, लेकिन ऐसे मामले काफ़ी दुर्लभ लगते हैं
आबादी 40,000 से कम हो तब भी राजधानियों को ज़रूर शामिल किया जाना चाहिए, और किसी न किसी तरह star mark भी होना चाहिए
यह सच में शानदार है। फ़ोन पर इसका इतना तेज़ लोड होना प्रभावित करता है
spatial data को Paths में compress करने का विचार बहुत अच्छा है
ODbL license से बचने के लिए OSM की जगह Natural Earth data का उपयोग करना भी अच्छा रहेगा
spatial data को Paths में बदलने वाला tool भी शामिल किया जाए तो यह वाकई बहुत अच्छा होगा