Protomaps - मुफ़्त ओपन सोर्स विश्व मानचित्र
(protomaps.com)- वे टीमें जिनके लिए वेब मैप डिप्लॉयमेंट में सर्वर संचालन और मैप API लागत बोझिल है, उनके लिए एकल स्थिर फ़ाइल के रूप में self-hosting का विकल्प प्रदान करता है
- फ्रंटएंड डेवलपर केवल cloud storage और HTTP range requests के ज़रिए vector map tiles को सरल और कम लागत में सर्व कर सकते हैं
- PMTiles raster·vector basemap·custom layer को समेटने वाला एक open format है, और MapLibre plugin·CLI·CDN integration को सपोर्ट करता है
- Protomaps, OpenStreetMap और अन्य open data पर आधारित basemap tileset को मेंटेन करता है, जिससे interactive web maps में OSM को आसानी से लागू किया जा सकता है
- गैर-व्यावसायिक उपयोग मुफ़्त है, और व्यावसायिक उपयोग या managed basemap tile API की ज़रूरत होने पर GitHub Sponsor में भाग लेना आवश्यक है
एकल फ़ाइल से self-hosted मानचित्र
- Protomaps एक मुफ़्त और कस्टमाइज़ करने योग्य मानचित्र है, जिसे पूरी दुनिया के मानचित्र को एक single static file के रूप में डिप्लॉय करने के लिए बनाया गया है
- इसे cloud storage पर अपलोड करके इस्तेमाल किया जा सकता है, और यदि आपको S3 का अनुभव है तो आप पृथ्वी-स्तर का interactive map प्रकाशित कर सकते हैं
- इसे इस तरह डिज़ाइन किया गया है कि फ्रंटएंड डेवलपर अलग सर्वर सेटअप के बिना मानचित्र को self-host कर सकें
- vector map tiles को HTTP range requests का उपयोग करके सरल और कम लागत में सर्व किया जाता है
- शुरुआत के लिए Get Started और quick start tutorial उपलब्ध हैं
PMTiles और मानचित्र संरचना का तरीका
- उदाहरण HTML + JS मात्र से basemap और data overlay बनाने की न्यूनतम संरचना दिखाते हैं
- PMTiles Hilbert क्रम पर आधारित tile pyramid archive specification है, जिसमें raster·vector basemap·custom layer जैसे geospatial data रखे जा सकते हैं
- MapLibre plugin, command line interface, CDN integrations उपलब्ध हैं
- फ़ॉर्मैट का विवरण PMTiles दस्तावेज़ में देखा जा सकता है
OpenStreetMap आधारित basemap
- Protomaps, OpenStreetMap और अन्य open data sources से बने basemap tileset को मेंटेन करता है
- यह interactive web maps में OSM अपनाने का एक आसान रास्ता हो सकता है
- पूरा planet file मुफ़्त में डाउनलोड किया जा सकता है, या CLI से केवल इच्छित क्षेत्र निकाला जा सकता है
- Download your area से क्षेत्र extraction शुरू किया जा सकता है
- जो उपयोगकर्ता बड़ी फ़ाइलों को सीधे मैनेज नहीं करना चाहते, वे CDN cache आधारित basemap tile API का उपयोग कर सकते हैं
- गैर-व्यावसायिक उपयोग मुफ़्त है
- व्यावसायिक उपयोग के लिए GitHub Sponsor आवश्यक है
- Maps API को कोड में इस्तेमाल किया जा सकता है
उपयोग परिदृश्य
- कंपनियाँ मौजूदा cloud storage का उपयोग करके साइट मैप embed पर full-stack control हासिल कर सकती हैं, और मासिक सैकड़ों डॉलर की मैप लागत को घटाकर कुछ पैसों के स्तर तक ला सकती हैं
- न्यूज़रूम third-party API पर निर्भर हुए बिना लंबे समय तक चलने वाले कस्टम मानचित्रों से interactive stories बना सकते हैं
- वैज्ञानिक क्षेत्रों में PMTiles के साथ पृथ्वी-स्तर के climate·environment data को विज़ुअलाइज़ किया जा सकता है, और open source tools व map frontend से data explorer बनाया जा सकता है
- सरकारी संस्थान Big Tech पर निर्भरता कम करते हुए नागरिक privacy और GDPR compliance को बनाए रख सकते हैं, और proprietary GIS के मुफ़्त विकल्प का उपयोग कर सकते हैं
2 टिप्पणियां
Protomaps - OpenStreetMap से अपना खुद का map system बनाना
Protomaps - Serverless maps को open source के रूप में जारी किया
Hacker News की राय
Protomaps के pmtiles tool से San Francisco के दक्षिण में Half Moon Bay के आसपास का ही कटा हुआ map बनाकर देखा
नवीनतम macOS Go binary https://github.com/protomaps/go-pmtiles/releases से ली, और मोटा boundary box http://bboxfinder.com/#37.373977,-122.593346,37.570977,-122.... से खोजा
चलाया गया command
pmtiles extract https://build.protomaps.com/20231023.pmtiles hmb.pmtiles \ --bbox=-122.593346,37.373977,-122.400055,37.570977था, और नतीजे में मिली 2MB hmb.pmtiles को https://maps.protomaps.com/ के “drop zone” में drag करके डालने पर OpenStreetMap metadata और building outlines के स्तर तक zoom हो सकने वाला detailed map मिला2MB में इतना कुछ सच में impressive है, और file यहां है: https://gist.githubusercontent.com/simonw/3c1a5358ca8f782f13...
आम तौर पर Google Maps embed किया जाता है, लेकिन कई बार आसपास के local area का map ही काफी होता है और शायद ज्यादा सस्ता भी पड़ता है
users को पूरी file download करने की जरूरत भी नहीं होगी, इसलिए यह काफी बढ़िया है, और static site में map डालकर देखने को लेकर उत्साहित हूं
linked pmtile file काम करती है, लेकिन मेरी बनाई छोटी file काम नहीं करती। फिर भी project के लिए map पाने का concept अपने-आप में बेहतरीन है
Tilemill alpha access मिलने के समय से ही Mapbox को काफी इस्तेमाल करता आया हूं, और मेरे नजरिए से यह vector tiles और Mapbox GL / Map GL के बाद open maps क्षेत्र में सबसे महत्वपूर्ण योगदान है
Mapbox ने MTS के जरिए tile baking को accessible बनाते हुए दरवाजा खुला रखा था, लेकिन powerful होने के बावजूद वह बहुत complex और महंगा था। Tippecanoe से tiles bake किए जा सकते थे, लेकिन vector tile hosting फिर भी सिरदर्द थी, और PMTiles इस्तेमाल करने पर vector tile hosting Mapbox की तुलना में ज्यादा आसान, सुविधाजनक और लागत में एक order of magnitude से भी ज्यादा सस्ती हो सकती है
खासकर तब, जब flashy projections या 3D support की जरूरत न हो और MapLibre काफी हो। Felt भी internally PMTile approach इस्तेमाल करने वाली प्रमुख services में से एक लगती है, और Tippecanoe में लगातार investment करना भी बढ़िया है। जब Mapbox का focus in-car navigation की तरफ जाता दिख रहा है, ऐसे में नई जगह से disruptive innovation आते देखना अच्छा है, और और भी चौंकाने वाली बात यह है कि यह one-person team से आया है
PMTiles का उभरना DuckDB spatial query support के साथ मिलकर बहुत innovation खोल सकता है। अगर बड़े GeoParquet files को query/process करके तेजी से baked PMTiles के रूप में stream किया जा सके, तो काफी powerful use cases संभव हो जाते हैं
gpq convert Cairo_Governorate.parquet --to=geojson | tippecanoe Cairo.geojson -o Cairo.pmtileshttps://cloudnativegeo.org/blog/2023/10/where-is-cog-for-vec...
https://github.com/planetlabs/gpq
पत्रकार-developers की एक online community को चुपचाप पढ़ता हूं, और वहां कुछ लोग PMTiles को custom-styled map tiles खुद host करने की लागत घटाने के तरीके के रूप में देख रहे हैं
उदाहरण के लिए “How The Post is replacing Mapbox with open source solutions” https://www.kschaul.com/post/2023/02/16/how-the-post-is-repl... देखने लायक है
जिसे curiosity हो, उसके लिए: OSM से derived sample PMTile file
protomaps-basemap-opensource-20230408.pmtilesका size 103GB हैhttps://docs.protomaps.com/basemaps/downloads
daily/weekly/monthly base files के लिए अगर सिर्फ changes download करके apply कर सकें तो अच्छा होगा
“Google Maps API में उदार free tier है, लेकिन 30,000 map loads से ऊपर जाने पर लागत ज्यादा हो जाती है। Protomaps शुरुआत से ही self-hosted सिस्टम के रूप में डिजाइन किया गया है, और cloud storage पर 100% static backend के रूप में चलता है, इसलिए आपको सिर्फ storage और transfer cost देनी होती है। मध्यम उपयोग में यह कुछ cents भर हो सकता है” — यह बात दिलचस्प है
सुझाए गए hosting setup और Google Maps की लागत तुलना, और किस बिंदु पर cost lines एक-दूसरे को काटती हैं, यह देखना चाहूंगा
अगर map को 100% up-to-date होना जरूरी नहीं है और वह सिर्फ किसी खास क्षेत्र में इस्तेमाल होता है, तो self-hosting के लिए यह वाकई आकर्षक तरीका लगता है। साल में एक बार file को “recompile” करके static file hosting पर डाल दें, तो बाहरी dependencies लगभग न के बराबर रखने वाली आसान प्रक्रिया हो सकती है
संशोधन: पूरी दुनिया के official download link[1] मिल गए, जो 100GB से थोड़ा ज्यादा हैं। तो मेरे सवाल का जवाब शायद “कुछ सौ MB से कुछ GB” जैसा होगा, और यह पूरी तरह ठीक लगता है
[1] https://docs.protomaps.com/basemaps/downloads
Protomaps documentation पढ़ने पर दिखता है कि Cloudflare CDN में requests cache करने का तरीका बताया गया है, इसलिए हर cache अवधि में हर tile request की लागत सिर्फ एक बार देनी होगी। काफी सस्ता है
Protomaps की पुरानी submission title थी: “Serverless maps at 1/700 the cost of Google Maps API”
Protomaps के founder Brandon कुछ महीने पहले Geomob podcast में आए थे: https://thegeomob.com/podcast/episode-176
मेरे लिए सबसे दिलचस्प हिस्सा PMTiles है
“PMTiles tile data pyramid के लिए single-file archive format है। PMTiles archive को S3 जैसे storage platforms पर host किया जा सकता है, और यह कम-लागत, zero-management map applications संभव बनाता है”
“PMTiles Z/X/Y coordinates से address किए जाने वाले tile data का general-purpose format है। इसमें map basemap vector tiles, remote-sensing observations, JPEG images जैसे कई तरह के data रखे जा सकते हैं”
“PMTiles reader HTTP range requests का इस्तेमाल करके PMTiles archive के अंदर से सिर्फ जरूरी tiles या metadata को on-demand fetch करता है”
“Tiles और directory layout इस तरह डिजाइन किए गए हैं कि pan/zoom करते समय अतिरिक्त requests की संख्या न्यूनतम रहे”
https://docs.protomaps.com/pmtiles/
मैं रोज CSV file लेकर उसे vector tiles में बदलता था, S3 से sync करता था और फिर mapbox-gl map पर दिखाता था, लेकिन सबसे बड़ा खर्च S3 file operations थे। लागत घटाने के लिए मैंने काफी aggressive clustering की और tiles की संख्या लगभग 75,000 तक घटाई, फिर भी जिस update frequency की जरूरत थी, उस पर सिर्फ S3 operations का खर्च $500/month आ रहा था
अब मैं files को single PMTiles file के रूप में process करता हूं और सिर्फ वही एक file deploy करता हूं, तो लागत कुछ cents तक घट गई है
Public maps बनाने के लिए इसने संभावनाएं काफी खोल दी हैं, और अगर रुचि हो तो 2023 के पूरे Canada hotspot data को यहां देख सकते हैं: https://lens.pathandfocus.com
Vector side में पहले तरीका या तो बहुत सारी छोटी files रखना था, या एक बड़ी file रखना था जिसके लिए individual tiles serve करने वाला frontend चाहिए होता था
अब आप मजबूत machine पर OSM dump को country-level basemap में कुछ मिनटों में, और continent-level में कुछ घंटों में convert करके custom stylesheet के साथ सामान्य web server पर खुद host कर सकते हैं
Maplibre[1] + PMTiles + Felt के tippecanoe[2] का कॉम्बिनेशन, अगर Web Mercator projection से बंधे रहना आपको ठीक लगता है, तो self-hosted web maps के लिए बेहतरीन है
लगभग हर geospatial source को GDAL[3] और tippecanoe से
.pmtilesमें बदला जा सकता है:(.shp .gpkg ...) | ogr2ogr -> .geojson | tippecanoe -> .pmtilesOpenStreetMap डेटा के लिए planetiler[4] है, और Maplibre के साथ इस्तेमाल किए जा सकने वाले openmaptiles[5] styles भी हैं
इस कॉम्बिनेशन से open source data pipeline के साथ AWS S3+CloudFront या Cloudflare R2 पर कुछ cents की लागत में host किए जा सकने वाले अच्छे starting point मिल जाता है
[1] https://maplibre.org/
[2] https://github.com/felt/tippecanoe
[3] https://gdal.org/
[4] https://github.com/onthegomap/planetiler
[5] https://openmaptiles.org/styles/
वैसे, मुझे GDAL/ogr2ogr docs पढ़ने में काफ़ी मुश्किल लगे, इसलिए शुरुआत के example के तौर पर यह command देख सकते हैं
ogr2ogr -f GeoJSON counties.json -t_srs EPSG:4326 -nln counties -sql "SELECT STATEFP, COUNTYFP, NAME FROM tl_2022_us_county" /vsizip/tl_2022_us_county.ziphttps://census.gov/geographies/mapping-files/…
मैंने इस project में contribute किया है, और हमारी company में भी इसे production में इस्तेमाल कर रहे हैं
यह सच में अच्छा है, Brandon भी बहुत मददगार हैं, और अब तक इसमें हुए सारे काम के लिए आभार महसूस होता है
PMTiles का उपयोग करके serverless maps deploy करने में मुझे काफ़ी अच्छे results मिले हैं
अगर AWS CloudFront/Lambda@Edge/S3 पर deploy करने में रुचि है, तो https://github.com/serverlessmaps/serverlessmaps देखें