9 पॉइंट द्वारा GN⁺ 2024-04-22 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • 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 में इस्तेमाल के दो तरीके

  • basemap के रूप में उपयोग

    • Leaflet basemap के रूप में tinyworldmap इस्तेमाल करने के लिए head टैग में distribution script जोड़ें
    • stable version script https://tinyworldmap.com/dist/v3/tiny-world-all-10000.js है, जिसमें map display के लिए सारा data शामिल है
    • Leaflet tile layer की जगह नीचे दिए गए रूप में L.GridLayer.TinyWorld जोड़ें
    new L.GridLayer.TinyWorld({maxZoom: 19}).addTo(map)
    
  • offline fallback map के रूप में उपयोग

    • offline-first web apps में image-based maps को सभी zoom levels के लिए cache करना, tiles की बहुत बड़ी संख्या के कारण, संभव नहीं होता; कुल आकार अक्सर terabytes में पहुँच जाता है
    • यह repository map-enabled web apps की offline functionality के लिए एक service worker देती है
    • service worker install होने पर fallback map preload हो जाता है
    • देखे गए pages cache हो जाते हैं
    • basemap cache से बाहर रखा जाता है
    • जब server उपलब्ध हो, तब cache data इस्तेमाल नहीं किया जाता
    • अगर user offline हो, तो website cache से serve होती है, और service worker OSM tile server requests को intercept करके tinyworldmap से locally replacement tiles generate करता है
    • service worker register करने से पहले, service worker के अंदर IMPORTANT चिह्नित सभी हिस्सों को संशोधित करना चाहिए
    • registration के बाद Leaflet tile layer attribution में OpenStreetMap और tinyworldmap दोनों शामिल होने चाहिए
    • Hitchmap tinyworldmap को fallback के रूप में इस्तेमाल करने वाले production app का एक उदाहरण है
    • service worker support वाले browser में website खोलें, थोड़ी देर इंतज़ार करें, फिर internet बंद करके refresh करें; app को fallback map के साथ सामान्य रूप से काम करना चाहिए
    • service worker installation में समय लग सकता है

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 टिप्पणियां

 
GN⁺ 2024-04-22
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 इस्तेमाल करना बेहतर होगा

    • दिशा सही लगती है, लेकिन 100 सबसे बड़े द्वीप, 50 सबसे बड़ी झीलें, 200 सबसे बड़ी नदियाँ जैसी प्रमुख भौगोलिक चीज़ें ज़रूर शामिल होनी चाहिए
    • roads और railroads के लिए भी यही बात लागू होती है। अगर यह कार में रखने वाला road map है तो ज़रूरी हैं, वरना road locations की बहुत कम ज़रूरत होती है
      ये दूसरी संभावित जानकारी को बहुत ज़्यादा ढक देती हैं
    • जिज्ञासा में कुछ जगहें देखीं; अमेरिका के Virginia का Alexandria नदी के दूसरी तरफ़ है, और Bahrain काफ़ी बुरी तरह दिखता है
    • यह हिस्सा v2 में सुधारा गया है
  • अच्छा है, लेकिन coastline detail बहुत कम है। UK के कुछ कस्बे समुद्र के ऊपर तैरते दिख रहे हैं, और दूसरी तरफ़ Greenland और Northern Canada सारे vertices ले रहे हैं
    लगता है Mercator projection के हिसाब से detail level पहले से consider किया गया है, लेकिन जहाँ लगभग कोई नहीं रहता वहाँ की priority कम करनी चाहिए

    • बढ़िया project है। शामिल करने की जगहें चुनते समय Wikidata का QRank भी इस्तेमाल करें तो कम आबादी वाले लेकिन प्रसिद्ध द्वीप भी दिख सकते हैं
      QRank का SQLite DB भी पहले HN पर आया था
      [1] https://qrank.wmcloud.org/
      [2] https://github.com/hikeratlas/qrank
    • city detail और coastline detail का अनुपात अजीब तरह से शहरों की तरफ़ झुका हुआ है। लगता है सटीक borders या coastlines से ज़्यादा शहर डालने पर ज़ोर है
      Netherlands का एक province मुख्य भूभाग से कटा हुआ दिखता है, जैसे वह कोई island हो, जबकि असल में ऐसा नहीं है। लेकिन उस province के अंदर के पाँच शहरों के नाम दिए गए हैं, जिनमें से कुछ लगभग एक-दूसरे पर चढ़े हुए हैं
      दूसरी तरफ़ Afsluitdijk को शामिल करना मुझे व्यक्तिगत रूप से अनावश्यक detail लगता है, लेकिन यह समझ आता है कि कौन-सी landmass खींचनी है और साधारण maritime infrastructure क्या है, इसे programmatically अलग करना मुश्किल है
      issue tracker में ticket खोलना चाहिए, लेकिन mobile पर login नहीं है इसलिए अभी HN comment ही सबसे अच्छा विकल्प है। अगर किसी और को भी ऐसा ही लगता है, तो इस comment के आधार पर ratio adjustment, शहरों के बीच minimum distance, या पूरे file size को घटाने जैसी सुधार-सुझाव दिए जा सकते हैं
    • इसी वजह से islands या archipelago regions में यह लगभग बेकार हो जाता है। Philippines में भी बहुत से द्वीप हैं, लेकिन कई काफ़ी बड़े हैं; फिर भी यह map उपयोगी नहीं बनता
      French Polynesia तो map पर है ही नहीं
    • fjords हटाकर और दूसरी जगह ज़्यादा detail जोड़कर एक nightly version जारी किया गया है। कुल मिलाकर resolution भी ज़्यादा है
      शुरू में ऐसा इसलिए नहीं किया गया था क्योंकि पुराने phones, खासकर Firefox for Android में, बहुत सारे polygons draw करते समय crash हो सकते थे। बाद में drawing procedure optimize किया गया, लेकिन फिर भी सावधानी ज़रूरी है
      [1] https://tinyworldmap.com/beta.html
    • simplification कुल मिलाकर काफ़ी ढीली है। Caribbean में तो पूरे देश ही ग़ायब हैं
      यह तो बुनियादी 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

    • ठीक है, लेकिन bugs काफ़ी हैं। “Cape town” South Sudan में दिखता है, जबकि देश का नाम ही नहीं है, और Eritrea का नाम भी ग़ायब है। Somalia वाला block दो अलग रंगों में बँटा हुआ है
      हल्का map बनाना और internationalization संभालना तुलनात्मक रूप से आसान था, क्योंकि public data sources और libraries कई हैं
      असली मुश्किल हिस्सा पूरी तरह administrative definitions है। ज़्यादातर देशों से जुड़े data के साथ map source का कहीं-न-कहीं mismatch ज़रूर होगा, और आख़िर में ख़ुद custom map बनाना पड़ता है
      “देश” क्या है, इस पर कोई सहमति नहीं है। Western Sahara आधिकारिक रूप से देश है, लेकिन व्यवहार में Morocco ने लगातार उस पर क़ब्ज़ा बनाए रखा है; Somalia में Somaliland और Puntland वास्तविक रूप से स्वतंत्र देशों की तरह चलते हैं, लेकिन उन्हें औपचारिक मान्यता नहीं है। Greenland, Niue वगैरह इनके बीच कहीं आते हैं
    • यह कैसे बनाया गया, इसकी व्याख्या नहीं मिली, लेकिन map सुंदर है। Tiny World Maps में भी कुछ संबंधित बातें हैं, लेकिन वहाँ भी बनाने की प्रक्रिया का पर्याप्त विवरण नहीं है
      देशों के स्तर पर काम करने के अनुभव से कहूँ तो यह गंदे hacks से भरी manual process थी, और यह test करना सबसे कठिन था कि सब ठीक से fit हुआ या नहीं। खासकर सही generalization level और लोग अपने इलाके के map से कैसी उम्मीद रखते हैं, यह मुश्किल हिस्सा है
      जानना चाहूँगा कि क्या इस map को काफ़ी बेहतर बनाने में लगने वाली मेहनत वाजिब मानी जाती है
    • पता नहीं star सबसे बड़े शहर को दिखाता है या राजधानी को, लेकिन अगर दूसरा मतलब है तो Tanzania ग़लत है
      star Dar Es Salaam पर है, लेकिन label Dodoma का है। Dodoma वास्तव में राजधानी है, लेकिन देश के ज़्यादा मध्य भाग में है
    • “i18n” यह abbreviation ख़ुद बहुत internationalized नहीं है
  • काफ़ी प्यारा है। पहले मैंने भी कुछ ऐसा ही बनाया था, हालांकि पूरी तरह वही नहीं
    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 आबादी तक नीचे चली जाती है, यह दिलचस्प लगा
    अभी तय नहीं कर पाया हूँ कि यह संख्या चौंकाने वाली है या नहीं

    • अमेरिका के शहरों को जनसंख्या के हिसाब से शीर्ष 100 तक देखें तो यह लगभग 2 लाख तक नीचे जाता है, यह बात मैं काफ़ी समय से जानता था
      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 उपयोगिता और फ़ाइल आकार के संतुलन बिंदु से काफ़ी नीचे है। उदाहरण के लिए, आकार दोगुना भी होता तो सीमाएँ इतनी ऊबड़-खाबड़ नहीं होतीं

    • पूरी फ़ाइल gzip compression के बिना लगभग 700KB है
      “इसमें सीमाओं और 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 भी शामिल किया जाए तो यह वाकई बहुत अच्छा होगा