OpenStreetMap के नए वेक्टर टाइल
(tech.marksblogg.com)- 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_tilemorecantilenotebook
- 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.jsonspecify करके 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 शामिल हैं
addressesbridgesbuildingsferrieslandoceanpier_linespier_polygonsplace_labelspoispublic_transportsitesstreet_labelsstreet_polygonsstreetsstreets_labels_pointswater_polygonswater_polygons_labels
DuckDB से POI layer देखना
poislayer को अलग JSON file के रूप में extract करने के बाद DuckDB केST_READसे खोलकर analyze किया गयाcuisinevalue वाले POI 67 rows के रूप में query हुए- Example
amenityमेंrestaurant,fast_food,cafeशामिल हैं - Example
cuisineमेंfrench,greek,american,lebanese,coffee_shop,asian,persian,chicken,pizzaशामिल हैं
- Example
- DuckDB
SUMMARIZEresult से 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.8MBbuildings.gpkg: 6.2MBpois.gpkg: 1.4MBstreet_labels.gpkg: 1.4MBland.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 टिप्पणियां
OpenStreetMap फ़ाउंडेशन ने आधिकारिक रूप से vector map tiles का संचालन शुरू कर दिया है
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 को संभव बनाएगी
आधुनिक 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 बनाए रख सकते हैं
style को मैंने मूल raster tiles के look के काफ़ी करीब रखा है, लेकिन vector version में बहुत ज़्यादा interactivity जोड़ी है
style और tile design के नज़रिए से दिलचस्प बात यह है कि tiles कहाँ और कैसे render होते हैं, इसके हिसाब से performance trade-offs पूरी तरह बदल जाते हैं। यह स्वाभाविक बात है, लेकिन इससे server और client पर visual possibilities भी प्रभावित होती हैं
फिर भी OSM maps कहीं ज़्यादा उपयोगी लगते हैं क्योंकि इनमें दिखने वाले points of interest ज़्यादा होते हैं। सिर्फ map देखकर ही असली जगह का एहसास होने लगता है, और पार्क पार्क जैसे, अस्पताल अस्पताल जैसे दिखते हैं
Google Maps graphic designer के नज़रिए से बेहतर लग सकता है। लेकिन दिशा समझने के लिए आमतौर पर आपको सड़कों और intersections के आकार की तुलना करनी पड़ती है। Google 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 को मुफ़्त में इस्तेमाल किया जा सकता है। ओपन सोर्स का शुक्रिया
मेरा इरादा किसी 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 में है
लेकिन यह बात सही है कि कुछ 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 में ऐसा करने की संभावना है
उदाहरण के लिए https://protomaps.com/, https://openmaptiles.org/, https://versatiles.org/ हैं
gzip compression भी पहले से tiles के अंदर ही हो चुका होता है
एक और समस्या यह है कि vector version में अरबी फ़ॉन्ट ठीक से render नहीं हो रहे। वे right-to-left की जगह left-to-right render हो रहे हैं, और अक्षर जुड़े हुए दिखने के बजाय अलग-अलग दिखते हैं
इसलिए जो टूट-फूट दिख रही है, वह style या local पर content render करने वाली library की समस्या है
साथ में देखने लायक: OpenFreeMap — मुफ़्त OpenStreetMap vector tile hosting
https://openfreemap.org/
https://github.com/hyperknot/openfreemap?tab=readme-ov-file#...
जिज्ञासा है कि क्या यह भी उसी vector technology stack पर आधारित है, या फिर पूरी तरह अलग development है
“इमेजें काफ़ी ज़्यादा sharp हो जाएँगी और label language switch भी किया जा सकेगा” वाला हिस्सा उम्मीद के मुताबिक शायद इतना अच्छा न निकले
भाषा बदलने पर label size वही बना रहेगा, इसकी कोई गारंटी नहीं है, और label size map layout के साथ interact करता है और यह भी तय करता है कि क्या दिखेगा
अगर labels बड़े हो जाएँ, तो वे map को बहुत ज़्यादा ढक सकते हैं या एक-दूसरे पर चढ़ सकते हैं। अगर labels छोटे हो जाएँ, तो users सोच सकते हैं कि जो शहर पहले space constraints की वजह से नहीं दिख रहे थे, वे अब बने हुए खाली स्थान में क्यों नहीं दिखाई दे रहे
बस सभी सड़कों के नाम दिखा देने चाहिए। भीड़-भाड़ दिखे तो भी कोई बात नहीं। चौराहे पर खड़े होकर बिना नाम वाले map को देखना बेकार का map है
कई सालों से इस्तेमाल हो रही raster tiles में भी यही बात थी
यह बहुत स्वागतयोग्य नया बदलाव है। उम्मीद है कि maps और अच्छे दिखेंगे
लेकिन “my workstation” section थोड़ा अजीब लगा। इसका लेख के बाकी हिस्से से ज़्यादा संबंध नहीं दिखता, और बाद में जिन कामों की बात है उनके लिए भी कोई ऊँची system requirements ज़रूरी नहीं लगतीं
अगर “इमेज कहीं ज़्यादा साफ़ हो जाएँगी और label language switch करना भी संभव होगा”, तो क्या इसका मतलब है कि उदाहरण के लिए शहर के आकार का vector, यानी ठीक-ठीक कहें तो polygon, हर भाषा में परिभाषित शहर के नाम का metadata साथ लेकर चलेगा?
language switch फ़ीचर की उपयोगिता स्वाभाविक रूप से इस बात पर निर्भर करती है कि अनुवाद मौजूद हैं या नहीं। इससे editors को जगहों के नामों के और अनुवाद जोड़ने के लिए प्रोत्साहन भी मिल सकता है
इसका एक उदाहरण https://americanamap.org पर देखा जा सकता है। यह OSM data इस्तेमाल करता है, लेकिन इस लेख के tiles की तरह लगभग real-time को लक्ष्य नहीं बनाता
अच्छा होता अगर इसका मतलब यह होता कि OSMAnd और OrganicMaps आखिरकार साथ आकर अंतिम मुक्त open source map app जारी करेंगे
MVT format vector tiles navigation या search के लिए बिल्कुल उपयुक्त नहीं हैं। इसका मतलब यह नहीं कि इन्हें ज़बरदस्ती जोड़कर कुछ बनाया ही नहीं जा सकता, लेकिन यह काफ़ी अव्यावहारिक होगा
उदाहरण के लिए OSMAnd में OSM में योगदान करने वालों के लिए बहुत उपयोगी advanced user features हैं, लेकिन आम users के लिए app में वे सिर्फ़ interface को उलझा सकते हैं
https://marble.kde.org/ में 9 साल पहले से streaming vector OSM layer का अपना implementation था, और मैं काफ़ी समय से इंतज़ार कर रहा था कि ऐसा कुछ दूसरे OSM map apps में भी दिखे
Android OSM apps में पूरे देश के हिसाब से सैकड़ों megabytes के बड़े-बड़े map downloads लेना हमेशा storage की समस्या रहा है। अब आख़िरकार standard बनता दिख रहा है, यह देखकर बहुत अच्छा लग रहा है, और उम्मीद है कि कई apps इसे अपनाएँगे और और बेहतर बनाएँगे। शानदार काम है