3 पॉइंट द्वारा GN⁺ 2024-11-20 | 2 टिप्पणियां | WhatsApp पर शेयर करें
  • OpenStreetMap लंबे समय से static PNG-आधारित raster tiles देता रहा है, लेकिन अब Mapbox Vector Tiles(MVT) फॉर्मैट में vector tiles की hosting शुरू हो गई है, जिससे maps के उपयोग के तरीके और विस्तृत हो रहे हैं
  • Vector tiles में user styles और rendering rules को adjust कर सकते हैं, tiles के अंदर की जानकारी extract कर सकते हैं, या label language switching जैसी capabilities implement करने की गुंजाइश मिलती है
  • मुख्य OSM website अभी भी raster tiles इस्तेमाल करती है, लेकिन नए vector tiles को अलग web demo, QGIS और Leafmap में सीधे देखा जा सकता है
  • Burj Khalifa के पास z14 tile के example में 114KB MVT को 1.4MB JSON में convert किया गया, और POI layer में 474 records और कई top-level layer keys शामिल हैं
  • tiles2columns इस्तेमाल करके किसी specified bounding box के OSM vector tiles download कर उन्हें GeoPackage या Parquet में बदला जा सकता है, जिससे updated OSM data को file-based analysis में सीधे इस्तेमाल करना आसान होता है

OSM tiles में क्या बदल रहा है

  • OpenStreetMap अब तक predefined rendering rules और styles वाले static PNG raster tiles के रूप में maps देता रहा है
  • नई hosting Mapbox Vector Tiles, यानी MVT फॉर्मैट के vector tiles उपलब्ध कराती है
  • Vector tiles इस्तेमाल करने पर end users map presentation को ज्यादा directly control कर सकते हैं
    • styles और rendering rules adjust करना
    • हर tile में शामिल underlying information extract करना
    • ज्यादा sharp map images दिखाना
    • label language switching की संभावना पाना
  • OSM की मुख्य website अभी भी raster tiles देती है
  • नए vector tiles को web demo में ज्यादातर phones और desktop devices पर देखा जा सकता है

प्रयोग में इस्तेमाल हुए tools

  • Example में Python और कई geospatial tools से OSM data visualize और analyze किया गया है
  • Basic installation tools में jq, python3-pip, python3-virtualenv शामिल हैं
  • Python virtual environment में ये packages install किए गए
    • leafmap[maplibre]
    • mapbox_vector_tile
    • morecantile
    • notebook
  • DuckDB के साथ ये extensions इस्तेमाल किए गए
  • Map rendering के लिए QGIS 3.40 इस्तेमाल किया गया
    • QGIS Windows, macOS और Linux पर चलने वाला desktop application है
    • दुनिया भर में users द्वारा application executions लगभग 1.5 करोड़ बार प्रति माह के स्तर पर हैं

QGIS में vector tiles खोलना

  • QGIS में Layer Menu -> Add Layer -> Add Vector Tile Layer से OSM vector tiles add किए जा सकते हैं
  • नई connection में style URL के लिए यह value इस्तेमाल करें
  • Source URL में यह MVT endpoint specify करें
  • Stylesheet optional है; इसके बिना भी QGIS arbitrary colors में vector data render कर सकता है
  • QGIS में icon rendering बिगड़ने की समस्या देखी गई
    • दूसरे mapping tools उस style के sprites को ठीक से render करते हैं
    • QGIS में icons धुंधले black icons जैसे दिखते हैं
    • संबंधित issue QGIS #59492 में है

Leafmap और Jupyter Notebook rendering

  • Jupyter Notebook configuration folder बनाया गया, password set किया गया, और server को 127.0.0.1 पर run किया गया
  • Notebook उस user के permissions के साथ चलता है जिसने इसे run किया है और current directory व sub-files expose कर सकता है, इसलिए इसे empty folder में run करने का तरीका इस्तेमाल किया गया
  • Leafmap में leafmap.maplibregl इस्तेमाल किया गया और style URL के रूप में colorful.json specify करके Burj Khalifa के आसपास render किया गया
  • Leafmap rendering में POI icons सही से दिखते हैं

MVT को analyzable data में बदलना

  • Burj Khalifa के पास zoom level 14 tile को example के रूप में इस्तेमाल किया गया
  • Approximate coordinates [55.27, 25.2] को morecantile tiles 14 में डालकर tile coordinates [10707, 7006, 14] प्राप्त किए गए
  • उन values से यह tile download किया गया
  • 114KB MVT file को mapbox_vector_tile.decode और coordinate conversion function से 1.4MB JSON file में convert किया गया
  • Converted tile की top-level keys में ये layers शामिल हैं
    • addresses
    • bridges
    • buildings
    • ferries
    • land
    • ocean
    • pier_lines
    • pier_polygons
    • place_labels
    • pois
    • public_transport
    • sites
    • street_labels
    • street_polygons
    • streets
    • streets_labels_points
    • water_polygons
    • water_polygons_labels

DuckDB से POI layer देखना

  • pois layer को अलग JSON file के रूप में extract करने के बाद DuckDB के ST_READ से खोलकर analyze किया गया
  • cuisine value वाले POI 67 rows के रूप में query हुए
    • Example amenity में restaurant, fast_food, cafe शामिल हैं
    • Example cuisine में french, greek, american, lebanese, coffee_shop, asian, persian, chicken, pizza शामिल हैं
  • DuckDB SUMMARIZE result से POI data में values भरी होने का स्तर देखा जा सकता है
    • कुल POI records 474 हैं
    • name, name_de, name_en की null ratios क्रमशः 29.96% हैं
    • amenity की null ratio 31.86% है
    • cuisine की null ratio 85.86% है
    • geom की null ratio 0.00% है
  • approx_unique के आधार पर name में 258, name_de में 264, name_en में 245, amenity में 27, और cuisine में 39 values हैं

tiles2columns से bounding box extract करना

  • मौजूदा osm_split GeoFabrik द्वारा बनाए गए OSM PBF files को named GeoPackage files में convert करने वाला tool था
  • GeoFabrik PBF files, process किए जाने योग्य समय तक, कुछ दिन पुराने data हो सकते हैं
  • नए OSM vector tiles underlying data edit होते ही update हो जाते हैं
  • tiles2columns एक Python-based utility है, जो specified bounding box के OSM tiles download करके उन्हें GeoPackage या Parquet files में convert करती है
  • Northern Dubai के आसपास bounding box के example में 42 tiles download हुए और कुछ MB आकार की GeoPackage files बनीं
    • streets.gpkg: 6.8MB
    • buildings.gpkg: 6.2MB
    • pois.gpkg: 1.4MB
    • street_labels.gpkg: 1.4MB
    • land.gpkg: 744KB
  • Generated GeoPackage files को QGIS project में सीधे add किया जा सकता है
  • Files OSM MVT files में इस्तेमाल हुई keys के हिसाब से बंटी हैं, जिससे हर layer को independently identify, style और analyze करना आसान है
  • हर geometry के attributes अलग columns में stored हैं
  • pois.gpkg में नाम वाले POI query करने के example में 6,329 rows returned होती हैं, और इसमें Kiku, Fujiya Restaurant, Mövenpick Grand Al Bustan Dubai, McDonald's जैसे names शामिल हैं

2 टिप्पणियां

 
GN⁺ 2024-11-20
Hacker News की राय
  • Vector tiles को लेकर मेरी भावना कुछ मिश्रित है। अभी तक मुझे style और tile generator schema का ऐसा संयोजन नहीं मिला जो पुराने raster tiles जितनी detail दिखा सके
    लेख के screenshots में ही फ़र्क साफ़ दिखता है। पहले वाले में मूर्तियाँ, दुकानें, थिएटर, viewpoints जैसे points of interest, पुल के रूप में दिखने वाली सड़कें, घास और पार्क के रंगों का अंतर, अलग-अलग सड़कों की line width, खेल के मैदान, इमारतों और मोहल्लों के नाम, one-way arrows, इमारतों के हिस्से, सीढ़ियाँ, पेड़ वगैरह जैसी बहुत सारी जानकारी है
    दूसरे में बस एक trolley stop और एक सड़क का नाम दिखता है, और वह सड़क का नाम भी गलत render हुआ है
    मैंने openmaptiles style, protomaps default style, mapbox style और protomaps, openmaptiles, mapbox generators का काफी इस्तेमाल किया है, लेकिन OSM raster tiles जितना पढ़ने में आसान और detail से भरपूर कुछ नहीं मिला
    Vector styles में zoom और pan ज़्यादा smooth होते हैं और style बदलना भी आसान होता है, लेकिन अगर आप इन्हें अपने data के basemap के तौर पर नहीं, बल्कि असल map data देखने के लिए इस्तेमाल करना चाहते हैं, तो ये कम पड़ते हैं
    शायद इसकी वजह computing resources की सीमा हो सकती है। OSM raster tiles जितनी detail दिखाने के लिए client और tile generation दोनों तरफ बहुत ज़्यादा resources लग सकते हैं
    अच्छा होगा अगर OpenStreetMap एक और low-contrast, low-detail basemap देने के बजाय मौजूदा raster style की नकल ज़्यादा करीब से करे, और उम्मीद है कि यह public vector tile release ज़्यादा detailed vector maps को संभव बनाएगी

    • मूल बात सही है, लेकिन नज़रिया थोड़ा अलग हो सकता है। maps serve करने वालों के लिए vector tiles का मुख्य फ़ायदा sharpness या style flexibility जैसी छोटी सुविधाएँ नहीं, बल्कि यह है कि ज़रूरी computation बहुत कम हो जाती है
      आधुनिक raster tile generation infrastructure को बनाए रखना काफ़ी बड़ा काम है
      मैंने पहले cycle touring planning के लिए एक बहुत detailed style पर लंबे समय तक काम किया था: https://stevebennett.me/2015/01/14/cycletour-org-a-better-ma...
      मैंने इसे कई बार vector tiles में दोहराने की कोशिश की, लेकिन size limits से टकराए बिना पर्याप्त detail शामिल करना काफ़ी मुश्किल था, और default Mapbox tiles में तो ज़रूरी जानकारी उससे भी कम थी
      फिर भी vector tiles में कुछ ऐसे workaround हैं जो raster tiles में नहीं होते। उदाहरण के लिए आप अलग-अलग layers को on और off कर सकते हैं, और labels नीचे क्या है इसे समझते हुए readability बनाए रख सकते हैं
    • अब तक ऐसा लगता है कि focus उन styles को समृद्ध बनाने से ज़्यादा, लगातार अपडेट होने वाले vector tiles बनाने वाले software पर रहा है
    • मैंने OpenrailwayMap का एक fork बनाया है। मूल साइट https://www.openrailwaymap.org है, और vector style https://openrailwaymap.fly.dev पर है
      style को मैंने मूल raster tiles के look के काफ़ी करीब रखा है, लेकिन vector version में बहुत ज़्यादा interactivity जोड़ी है
      style और tile design के नज़रिए से दिलचस्प बात यह है कि tiles कहाँ और कैसे render होते हैं, इसके हिसाब से performance trade-offs पूरी तरह बदल जाते हैं। यह स्वाभाविक बात है, लेकिन इससे server और client पर visual possibilities भी प्रभावित होती हैं
    • मैं पूरी तरह सहमत हूँ। रास्ता खोजते समय मैं OpenStreetMap और Google Maps को मिलाकर इस्तेमाल करता हूँ, और चाहूँ भी तो सिर्फ OSM पर नहीं रह पाता क्योंकि उसमें registered places की संख्या Google Maps जितनी नहीं है
      फिर भी OSM maps कहीं ज़्यादा उपयोगी लगते हैं क्योंकि इनमें दिखने वाले points of interest ज़्यादा होते हैं। सिर्फ map देखकर ही असली जगह का एहसास होने लगता है, और पार्क पार्क जैसे, अस्पताल अस्पताल जैसे दिखते हैं
      Google Maps graphic designer के नज़रिए से बेहतर लग सकता है। लेकिन दिशा समझने के लिए आमतौर पर आपको सड़कों और intersections के आकार की तुलना करनी पड़ती है। Google Maps में हर जगह लगभग एक जैसी दिखती है
    • मेरी भी बिल्कुल यही राय है। openstreetmap.org का default style मेरे लिए लगभग pure happiness जैसा है, लेकिन vector maps को उस स्तर तक लाने की मैंने काफ़ी लंबे समय तक कोशिश की और कोई उपयोगी नतीजा नहीं मिला
      बस 2 मिनट इस्तेमाल करते ही detail की कमी तुरंत दिखने लगती है। यह सच में अफ़सोस की बात है, लेकिन मुझे उम्मीद है कि कभी न कभी कोई इसे हल कर लेगा
  • ओपन सोर्स community को vector map tiles की functionality बनाते हुए देखना दिलचस्प रहा है। 2018 के आसपास जब मैं web GIS पर काम कर रहा था, तब Google/Apple के streaming vector maps जादू जैसे लगते थे, और अगर उनका खर्च उठा पाता तो ज़रूर इस्तेमाल करता
    ज़्यादा समय नहीं बीता कि core technology open source में आ गई, और free hosting solutions भी सामने आ गए। अब Leaflet maps में बेहतरीन vector layers को मुफ़्त में इस्तेमाल किया जा सकता है। ओपन सोर्स का शुक्रिया

    • यह थोड़ा surprising है कि OSM को यहाँ तक पहुँचने में इतना समय लगा। बुनियादी technology pieces तो 10 साल से भी पहले मौजूद थे
      मेरा इरादा किसी free map service की शिकायत करना नहीं है; service शानदार है, और यह भी समझ आता है कि उनका ज़ोर editing और data ownership पर ज़्यादा है। infrastructure उपलब्ध कराना कठिन और महँगा है
      लेकिन मैं यह ज़रूर सोचता हूँ कि कुछ सालों तक MapBox के प्रभुत्व ने दूसरे प्रयासों को कितना रोका होगा
  • OSM-आधारित मैप होस्ट करते समय क्या ऑपरेटिंग लागत कम होती है, यह जानने की जिज्ञासा है। क्योंकि rendering के लिए कम CPU चाहिए होगा, और vector शायद storage space और bandwidth भी कम इस्तेमाल करेंगे

    • हाँ भी और नहीं भी
      नहीं होने की वजह यह है कि आधिकारिक OSM tile layer को Fastly का बड़ा sponsorship मिलता है। मैंने आख़िरी बार देखा था तब Fastly €720k दे रहा था, और AWS rendering की लागत €40k थी
      हाँ होने की वजह यह है कि तकनीकी रूप से कम resources लगते हैं, इसलिए AWS+Fastly पर भी कम बोझ पड़ता है, और self-hosting भी आसान हो जाती है
      मैंने पहले जो risk assessment विस्तार से पढ़ा था, उसमें लिखा था कि OSM “अगर Fastly sponsorship खो दे, तो standard tile layer के लिए सभी third-party access बंद कर सकता है और सिर्फ़ कुछ Varnish servers ही चला सकता है”
      मेरी समझ के अनुसार vector का मुख्य motivation cost reduction से ज़्यादा internationalization में सुधार, client side पर rendering decisions लेने की क्षमता, और ऐसे modern tooling stack का निर्माण था जिससे कई downstream फ़ायदे मिलें
      नई जानकारी और भी हो सकती है, और संबंधित सामग्री 1 और 2 में है
      1. https://operations.osmfoundation.org/2024/01/25/owg_budget.o...
      2. https://osmfoundation.org/wiki/Finances
    • नहीं भी कहा जा सकता है। vector tiles को बहुत पहले से ही बहुत कम मेहनत में self-host किया जा सकता था या किसी और से host कराया जा सकता था
      लेकिन यह बात सही है कि कुछ processing client पर शिफ्ट की जा सकती है, और उससे भी ज़्यादा महत्वपूर्ण यह कि कई style decisions client से कराए जा सकते हैं। बेशक, सब कुछ नहीं
      static या कम-बार update होने वाली vector tiles OSM data से कई tools के ज़रिए बनाई जा सकती हैं, और इस समय सबसे लोकप्रिय हैं https://github.com/systemed/tilemaker और https://github.com/onthegomap/planetiler
      असली नई बात यह है कि Paul ने OSMF के लिए जो काम किया, उसकी वजह से vector tiles को तुरंत update किया जा सकता है, यानी कुछ ही मिनटों में। यह OSM contributors के लिए feedback mechanism के रूप में महत्वपूर्ण है, और यही OSMF के अभी raster tile service चलाने की मुख्य वजह भी है
      इस समय vector tile service के इस्तेमाल पर कौन-सी सीमाएँ लगेंगी, यह अभी खुला सवाल है। raster tile service की तरह इसका इरादा third-party services से प्रतिस्पर्धा करने या उन्हें replace करने का नहीं है, लेकिन vector tile service में ऐसा करने की संभावना है
    • हाँ, vector tiles self-hosting के लिए काफ़ी ज़्यादा आसान हैं
      उदाहरण के लिए https://protomaps.com/, https://openmaptiles.org/, https://versatiles.org/ हैं
    • मैं openfreemap.org बनाने वाला हूँ। सही है। vector tiles में मूल रूप से static files host की जाती हैं, और server को HTTPS encryption के अलावा कुछ नहीं करना पड़ता
      gzip compression भी पहले से tiles के अंदर ही हो चुका होता है
  • एक और समस्या यह है कि vector version में अरबी फ़ॉन्ट ठीक से render नहीं हो रहे। वे right-to-left की जगह left-to-right render हो रहे हैं, और अक्षर जुड़े हुए दिखने के बजाय अलग-अलग दिखते हैं

    • vector tiles का मुख्य बिंदु यह है कि rendering local पर होती है, और tile schema को छोड़ दें तो इसे बदली जा सकने वाली style settings से नियंत्रित किया जाता है
      इसलिए जो टूट-फूट दिख रही है, वह style या local पर content render करने वाली library की समस्या है
    • QGIS vector tile renderer कैसे काम करता है, यह मुझे नहीं पता, लेकिन अगर यह GitHub demo page की बात है, तो MapLibre में RTL text plugin जोड़कर right-to-left text को सही तरह handle कराना आसान होना चाहिए: https://maplibre.org/maplibre-gl-js/docs/examples/mapbox-gl-...
  • साथ में देखने लायक: OpenFreeMap — मुफ़्त OpenStreetMap vector tile hosting
    https://openfreemap.org/

    • OpenFreeMap यह चीज़ें प्रदान नहीं करता: search या geocoding, route calculation·navigation·directions, static image generation, raster tile hosting, satellite image hosting, elevation lookup, custom tiles या datasets hosting
      https://github.com/hyperknot/openfreemap?tab=readme-ov-file#...
    • वाह, यह काफ़ी polished लग रहा है
      जिज्ञासा है कि क्या यह भी उसी vector technology stack पर आधारित है, या फिर पूरी तरह अलग development है
  • “इमेजें काफ़ी ज़्यादा sharp हो जाएँगी और label language switch भी किया जा सकेगा” वाला हिस्सा उम्मीद के मुताबिक शायद इतना अच्छा न निकले
    भाषा बदलने पर label size वही बना रहेगा, इसकी कोई गारंटी नहीं है, और label size map layout के साथ interact करता है और यह भी तय करता है कि क्या दिखेगा
    अगर labels बड़े हो जाएँ, तो वे map को बहुत ज़्यादा ढक सकते हैं या एक-दूसरे पर चढ़ सकते हैं। अगर labels छोटे हो जाएँ, तो users सोच सकते हैं कि जो शहर पहले space constraints की वजह से नहीं दिख रहे थे, वे अब बने हुए खाली स्थान में क्यों नहीं दिखाई दे रहे

    • Google Maps में zoom in·out करते समय शहरों और सड़कों के नाम गायब हो जाना मुझे सच में बहुत नापसंद है। कुछ सड़क या दुकान के नाम सिर्फ़ एक खास zoom level पर दिखते हैं, और ज़्यादा zoom in या out करने पर गायब हो जाते हैं
      बस सभी सड़कों के नाम दिखा देने चाहिए। भीड़-भाड़ दिखे तो भी कोई बात नहीं। चौराहे पर खड़े होकर बिना नाम वाले map को देखना बेकार का map है
    • किसी भी तरह, शुरुआती बिंदु label auto-placement ही है
      कई सालों से इस्तेमाल हो रही raster tiles में भी यही बात थी
    • क्या यह मानने की कोई वजह है कि placement algorithm बहुत अलग होने वाला है?
  • यह बहुत स्वागतयोग्य नया बदलाव है। उम्मीद है कि maps और अच्छे दिखेंगे
    लेकिन “my workstation” section थोड़ा अजीब लगा। इसका लेख के बाकी हिस्से से ज़्यादा संबंध नहीं दिखता, और बाद में जिन कामों की बात है उनके लिए भी कोई ऊँची system requirements ज़रूरी नहीं लगतीं

  • अगर “इमेज कहीं ज़्यादा साफ़ हो जाएँगी और label language switch करना भी संभव होगा”, तो क्या इसका मतलब है कि उदाहरण के लिए शहर के आकार का vector, यानी ठीक-ठीक कहें तो polygon, हर भाषा में परिभाषित शहर के नाम का metadata साथ लेकर चलेगा?

    • बड़े शहरों में पहले से ही कई भाषाओं में नाम शामिल हैं। उदाहरण के लिए Paris को देख सकते हैं: https://www.openstreetmap.org/relation/71525
      language switch फ़ीचर की उपयोगिता स्वाभाविक रूप से इस बात पर निर्भर करती है कि अनुवाद मौजूद हैं या नहीं। इससे editors को जगहों के नामों के और अनुवाद जोड़ने के लिए प्रोत्साहन भी मिल सकता है
    • अभी testing में इस्तेमाल हो रहा tile schema shortbread कई भाषाओं को support नहीं करता, लेकिन मेरी जानकारी में bugs सुलझने के बाद इस पर काम कर रहे लोग इसे support करना चाहते हैं
      इसका एक उदाहरण https://americanamap.org पर देखा जा सकता है। यह OSM data इस्तेमाल करता है, लेकिन इस लेख के tiles की तरह लगभग real-time को लक्ष्य नहीं बनाता
    • नहीं, लेकिन सिर्फ़ ज़रूरी text वाले tiles लाकर आपके पास पहले से मौजूद tiles को patch किया जा सकता है
  • अच्छा होता अगर इसका मतलब यह होता कि OSMAnd और OrganicMaps आखिरकार साथ आकर अंतिम मुक्त open source map app जारी करेंगे

    • दोनों apps मुख्य रूप से अपने-अपने format में preprocessed download/offline map data इस्तेमाल करते हैं
      MVT format vector tiles navigation या search के लिए बिल्कुल उपयुक्त नहीं हैं। इसका मतलब यह नहीं कि इन्हें ज़बरदस्ती जोड़कर कुछ बनाया ही नहीं जा सकता, लेकिन यह काफ़ी अव्यावहारिक होगा
    • एक ही अंतिम map app हो ही नहीं सकता। वजह यह है कि use cases अलग-अलग हैं
      उदाहरण के लिए OSMAnd में OSM में योगदान करने वालों के लिए बहुत उपयोगी advanced user features हैं, लेकिन आम users के लिए app में वे सिर्फ़ interface को उलझा सकते हैं
    • कम से कम इतना तो अच्छा होगा कि दोनों map tiles share कर सकें, ताकि एक ही map के लिए gigabytes भर की storage दोहरानी न पड़े
  • https://marble.kde.org/ में 9 साल पहले से streaming vector OSM layer का अपना implementation था, और मैं काफ़ी समय से इंतज़ार कर रहा था कि ऐसा कुछ दूसरे OSM map apps में भी दिखे
    Android OSM apps में पूरे देश के हिसाब से सैकड़ों megabytes के बड़े-बड़े map downloads लेना हमेशा storage की समस्या रहा है। अब आख़िरकार standard बनता दिख रहा है, यह देखकर बहुत अच्छा लग रहा है, और उम्मीद है कि कई apps इसे अपनाएँगे और और बेहतर बनाएँगे। शानदार काम है

    • मैंने Android पर Marble app ढूँढा, लेकिन वह न Play Store में है, न F-Droid में। वेबसाइट का Play Store link भी 404 दे रहा है। क्या इसे छोड़ दिया गया है?