Protomaps Basemap टाइलें

पूरा Protomaps Basemap, ज़ूम 0 से 15 तक, साधारण HTTP पर एक ही PMTiles आर्काइव के रूप में उपलब्ध है। किसी भी PMTiles क्लाइंट को इस URL से जोड़ें और यह काम करेगा।

https://tiles.jasontally.com/basemap.pmtiles

क्या OpenStreetMap टाइल ब्लॉक हो गई है, या tile.openstreetmap.org से 403 मिल रहा है? यहाँ से शुरू करें।

इसे आज़माएँ

तीन स्टाइलों में वही आर्काइव। स्टाइल बदलने पर पहले से लोड हो चुकी टाइलें वहीं रहती हैं, इसलिए यह तुरंत बदलता है।

z0

अपना खुद का बनाएँ

कोई रंग बदलें या किसी लेयर को बंद करें, नक्शा साथ-साथ अपडेट होता है। फिर स्टाइल JSON कॉपी करें — यह एक सामान्य MapLibre स्टाइल है जिसे आप स्वयं होस्ट कर सकते हैं। यह इन्हीं टाइलों की ओर इंगित करता है, इसलिए आप इसे जहाँ भी रखें यह काम करता रहेगा।

उपयोग करें

यह आर्काइव HTTP रेंज रिक्वेस्ट का समर्थन करता है, इसलिए हर PMTiles क्लाइंट इसे पढ़ सकता है।

एक। पेज पर नक्शा लगाएँ

इस फ़ाइल को कॉपी करें। यही पूरा उदाहरण है: तीन टैग, एक स्टाइल URL, एक नक्शा। दोनों लाइब्रेरियाँ पिन की गई हैं और BSD-3-Clause लाइसेंस के अंतर्गत हैं, और यदि आप CDN का उपयोग नहीं करना चाहते तो यही फ़ाइलें इस होस्ट से भी दी जाती हैं।

<!doctype html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>Basemap</title>
  <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/maplibre-gl@5.24.0/dist/maplibre-gl.css">
  <script src="https://cdn.jsdelivr.net/npm/maplibre-gl@5.24.0/dist/maplibre-gl.js"></script>
  <script src="https://cdn.jsdelivr.net/npm/pmtiles@3.2.1/dist/pmtiles.js"></script>
  <style>html, body, #map { margin: 0; height: 100%; }</style>
</head>
<body>
  <div id="map"></div>
  <script>
    // Teach MapLibre how to read a PMTiles archive.
    const protocol = new pmtiles.Protocol();
    maplibregl.addProtocol("pmtiles", protocol.tile);

    new maplibregl.Map({
      container: "map",
      style: "https://tiles.jasontally.com/styles/light.json",
      center: [2.35, 48.85],   // Paris
      zoom: 4
    });
  </script>
</body>
</html>

दो। अपनी मौजूदा स्टाइल में टाइलें बदलें

हर MapLibre स्टाइल अपनी टाइलें एक सोर्स से पढ़ती है। इन टाइलों का उपयोग करने के लिए, बस उस एक url को बदलें। स्टाइल में और कुछ नहीं बदलता।

  "sources": {
    "protomaps": {
      "type": "vector",
-     "url": "pmtiles://https://demo-bucket.protomaps.com/v4.pmtiles",
+     "url": "pmtiles://https://tiles.jasontally.com/basemap.pmtiles",
      "attribution": "<a href=\"https://www.openstreetmap.org/copyright\">&copy; OpenStreetMap contributors</a>"
    }
  }

या इसे कोड में करें, जो तब उपयोगी है जब स्टाइल किसी ऐसे सर्वर से आती है जिस पर आपका नियंत्रण नहीं है:

// Rewrite every PMTiles source in a style to point at these tiles.
const style = await (await fetch("https://your-server/style.json")).json();

for (const source of Object.values(style.sources)) {
  if (source.url?.startsWith("pmtiles://")) {
    source.url = "pmtiles://https://tiles.jasontally.com/basemap.pmtiles";
  }
}

new maplibregl.Map({ container: "map", style, center: [2.35, 48.85], zoom: 4 });

तीन। अपनी बनाई स्टाइल कहाँ रखें

ऊपर बिल्डर में दिया गया Style JSON बटन उस स्टाइल को खोलता है जिसे यह नक्शा अभी बना रहा है (आपके बदलावों सहित), और उस डायलॉग में कॉपी बटन है। इससे मिलने वाले JSON का उपयोग करने के दो तरीके हैं, और दोनों साधारण वेब पेज हैं।

इसे अपने पेज के पास एक फ़ाइल के रूप में सहेजें और style को इसकी ओर इंगित करें, ठीक वैसे ही जैसे इस होस्ट पर तीनों स्टाइलों का उपयोग किया गया है। यदि स्टाइल आपकी अपनी है और आपकी साइट के साथ बदलती है, तो यह तरीका चुनें:

// Save the copied JSON as my-basemap.json beside this file.
new maplibregl.Map({
  container: "map",
  style: "my-basemap.json",           // relative, same origin
  center: [2.35, 48.85],
  zoom: 4
});

या इसे सीधे HTML में रखें, जिससे केवल एक फ़ाइल रखनी होती है और अलग से कुछ होस्ट नहीं करना पड़ता। स्टाइल वही है, बस उसके रहने की जगह अलग है:

// The copied JSON, pasted straight into the page.
const myStyle = {
  "version": 8,
  "name": "Protomaps Basemap — custom",
  "glyphs": "https://tiles.jasontally.com/font/{fontstack}/{range}.pbf",
  "sprite": "https://tiles.jasontally.com/sprites/v4/light",
  "sources": { /* ... as copied ... */ },
  "layers":  [ /* ... as copied ... */ ]
};

new maplibregl.Map({ container: "map", style: myStyle, zoom: 4 });

glyphs और sprite की पंक्तियों को वैसा ही रहने दें। वे लेबल और आइकन बनाती हैं और इसी होस्ट की ओर इंगित करती हैं, इसलिए अपने पेज में पेस्ट की गई स्टाइल को आप जहाँ से भी सर्व करें, वह काम करती रहेगी। यदि आप इस होस्ट पर बिल्कुल निर्भर नहीं रहना चाहते, तो उन्हें इसके बजाय protomaps.github.io/basemaps-assets की ओर इंगित करें।

बदलने से पहले एक बात जाँच लें। यह आर्काइव Protomaps स्कीमा v3 है। किसी अन्य स्कीमा के लिए लिखी गई स्टाइल लोड तो होगी पर कुछ भी नहीं बनाएगी, क्योंकि सोर्स लेयर के नाम मेल नहीं खाते। नौ लेयर के नाम नीचे दिए गए हैं, और साथ में एक तैयार v3 स्टाइल भी है जिसे आप कॉपी कर सकते हैं।

चार। फ़ॉन्ट, स्प्राइट और लाइब्रेरियाँ

एक नक्शे में टाइलें, टेक्स्ट के लिए एक glyphs URL, आइकन के लिए वैकल्पिक रूप से एक sprite URL, और इन्हें ड्रा करने वाली लाइब्रेरियाँ होती हैं। यह सब यहाँ उन्हीं पाथ पर उपलब्ध है जिनकी अपेक्षा की जाती है, ताकि यदि आप चाहें तो पूरा नक्शा एक ही होस्टनेम से आ सके।

क्यायहाँ का URLलाइसेंस

MapLibre और PMTiles फ़ाइलें jsDelivr पर भी हैं और यहाँ भी। दोनों में से कोई भी URL काम करता है।

अंतिम पंक्ति का उपयोग इस पेज द्वारा नहीं किया जाता। यह Leaflet वेक्टर रेंडरर है, जिसे यहाँ प्रकाशित किया गया है ताकि बदलाव केवल एक स्क्रिप्ट टैग का हो। Leaflet स्वयं अपने CDN पर रहता है।

दो फ़ॉन्ट स्टैक, Noto Sans Regular और Noto Sans Medium, उन 256 रेंजों में बँटे हैं जो MapLibre एक बार में 256 कोडपॉइंट के हिसाब से माँगता है। केवल लैटिन ही नहीं, सभी 256 रेंज प्रकाशित की गई हैं: Protomaps स्थानों को उनके स्थानीय नाम से लेबल करता है, इसलिए टोक्यो या काहिरा के लिए हज़ारों की संख्या वाली रेंज चाहिए। यदि केवल अंग्रेज़ी नक्शे के काम आने वाली रेंज प्रकाशित की जाएँ, तो वे लेबल बिना किसी त्रुटि संदेश के गायब हो जाते हैं।

पाँच स्प्राइट शीट, प्रत्येक अपस्ट्रीम फ़्लेवर के लिए एक, 1x और 2x पर। नीचे दी गई स्टाइलें इन्हीं से आइकन बनाती हैं, इसलिए इन्हें फ़ेच किया जाता है। यदि आप अपनी स्टाइल में टाउनस्पॉट, हाईवे शील्ड या स्थानों के आइकन चाहते हैं, तो sprite को अपने फ़्लेवर वाली शीट पर इंगित करें। किसी शीट के आइकन नाम उसके light.json में सूचीबद्ध हैं।

नक्शा क्या बनाता है, और हर चीज़ कहाँ से आती है

हर लेयर इस आर्काइव की नौ सोर्स लेयरों में से एक है, इसलिए यहाँ किसी भी चीज़ के लिए दूसरे आर्काइव की आवश्यकता नहीं है। इनमें से दो का उल्लेख करना ज़रूरी है, क्योंकि दोनों ऐसी लगती हैं मानो कुछ गायब हो, जबकि ऐसा नहीं है:

लेयरस्रोतइस बिल्ड में है?
आकृतियाँ, सड़कें, इमारतें, जल, भूमिearth, landcover, landuse, water, roads, buildingsहाँ
स्थान, सड़क और जल के नामउन्हीं लेयरों पर मौजूद name फ़ील्डहाँ
स्थानों के आइकन, टाउनस्पॉटpois.kind, places, और स्प्राइटहाँ
रूट शील्डroads.shield_textनहीं। वर्तमान में सर्व किए जा रहे बिल्ड में यह फ़ील्ड नहीं है
मकान नंबरbuildings.kind=address और buildings.addr_housenumberनहीं, वही कारण

पतों के लिए कोई अलग आर्काइव नहीं है, और फ़ेच करने के लिए कोई अलग एड्रेस लेयर नहीं है। अपस्ट्रीम प्रोजेक्ट पता बिंदुओं को buildings लेयर के अंदर kind=address और addr_housenumber वाले फ़ीचर के रूप में रखता है। वह फ़ील्ड इस नक्शे द्वारा सर्व किए जा रहे बिल्ड के बाद वाले Protomaps बिल्ड में आया है, इसलिए मकान नंबर की लेयर तैयार है और अगले मासिक रिफ़्रेश में डेटा आने पर अपने आप चालू हो जाएगी। शील्ड टेक्स्ट के साथ भी यही बात है: वर्तमान बिल्ड में shield_text_length है, जो यह बताता है कि रूट नंबर में कितने अक्षर हैं, यह नहीं कि वे अक्षर क्या हैं, इसलिए उससे बनाई गई शील्ड हर राजमार्ग पर एक खाली आकृति जैसी दिखेगी।

खुद एक लेयर लिखना और उसमें रंग भरना

एक लेयर में फ़िल्टर, ज़ूम, आकृति और रंग होता है। फ़िल्टर की दो बातें हर किसी को उलझाती हैं, और दोनों बिना किसी त्रुटि के विफल हो जाती हैं:

तो एक सड़क, उसका नाम, और लाइन को बंद करने का टॉगल इस प्रकार है:

{
  "id": "road-major",
  "type": "line",
  "source": "protomaps",
  "source-layer": "roads",            // one of the nine
  "minzoom": 4,                                  // not drawn below this
  "filter": ["==", ["get", "kind"], "major_road"],
  "layout": {
    "line-cap": "round",
    "visibility": "visible"          // "none" to hide it
  },
  "paint": {
    "line-color": "#f7c44d",          // any CSS colour
    "line-width": ["interpolate", ["linear"], ["zoom"], 4, 1.7, 12, 6]
  }
}

नाम एक सिंबल लेयर है जो name फ़ील्ड को पढ़ती है, जिसके पीछे हेलो (halo) हो सकता है या नहीं भी। गायब ग्लिफ़ कोई त्रुटि नहीं देता, इसलिए आप जिस फ़ॉन्ट स्टैक की माँग करें वह इस होस्ट पर मौजूद दोनों में से एक होना चाहिए:

{
  "id": "road-label-major",
  "type": "symbol",
  "source": "protomaps",
  "source-layer": "roads",
  "minzoom": 11,
  "layout": {
    "text-field": ["coalesce", ["get", "name:en"], ["get", "name"]],
    "text-font": ["Noto Sans Medium"],  // or Noto Sans Regular
    "text-size": 10,
    "symbol-placement": "line"       // follow the road
  },
  "paint": {
    "text-color": "#2b2a26",
    "text-halo-color": "#ffffff",
    "text-halo-width": 1.1
  }
}

कुछ न बनाने वाली लेयर कोई त्रुटि नहीं है, और MapLibre यह नहीं बताएगा कि कौन सी जाँच विफल रही। यदि आपकी लेयर खाली है, तो इस क्रम में जाँचें: फ़ील्ड का नाम, लेयर का minzoom, फ़ॉन्ट स्टैक, और फिर शीट के अपने light.json में आइकन का नाम।

यदि आपके पास ऐसी स्टाइल है जो अपने ग्लिफ़ के लिए demotiles.maplibre.org की ओर इंगित करती है, तो केवल उस होस्टनेम को बदलना ही पूरा बदलाव है। पाथ जानबूझकर समान रखा गया है।

"glyphs": "https://tiles.jasontally.com/font/{fontstack}/{range}.pbf",
"sprite": "https://tiles.jasontally.com/sprites/v4/light"

// before, in a style you already have
- "glyphs": "https://demotiles.maplibre.org/font/{fontstack}/{range}.pbf",
+ "glyphs": "https://tiles.jasontally.com/font/{fontstack}/{range}.pbf",

यदि कोई स्टाइल ऊपर दिए गए दो फ़ॉन्ट स्टैक के अलावा किसी अन्य की माँग करती है, तो उसके लिए कुछ भी ड्रा नहीं होगा। Protomaps की अपनी स्टाइलें बोल्ड टेक्स्ट के लिए Noto Sans Medium का उपयोग करती हैं; इस सेट में Noto Sans Bold नहीं है, इसीलिए उसकी माँग करने वाली स्टाइल के सारे लेबल चुपचाप गायब हो जाते हैं।

कौन सा होस्ट तेज़ है, और इस बारे में क्या निर्णय लिया गया। अनुमान के बजाय मापा गया: बारी-बारी से किए गए अनुरोध, एक समय में एक, एक ही कनेक्शन पर, पहले तीन सैंपल हटाकर, और ट्रांसफ़र से पहले बाइट के समय (TTFB) को अलग रखकर। उस परीक्षण में CDN ने इन सभी फ़ाइलों के लिए 10 से 45 ms पहले उत्तर दिया, जो 15% नियम को पूरी तरह संतुष्ट करता है। इसी कारण लाइब्रेरियाँ jsDelivr से लोड होती हैं।

फ़ॉन्ट और स्प्राइट यहीं से सर्व किए जाते हैं, भले ही उसी माप के अनुसार CDN उन्हें लगभग 10 ms पहले दे देता। यह एक निर्णय है, माप नहीं। एक ही होस्टनेम से आने वाला नक्शा किसी दूसरे होस्ट के बंद होने पर टूटता नहीं है, और ग्लिफ़ सर्वर बंद होने का अर्थ है बिना लेबल वाला नक्शा। यदि आपको वे 10 ms चाहिए, तो glyphs को protomaps.github.io/basemaps-assets/fonts की ओर इंगित करें, यह उसी पाथ के साथ काम करता है। ये एक शहर से एक पाठक के आँकड़े हैं, और तुलना को दोबारा चलाना केवल एक कमांड का काम है।

पाँच। Leaflet के बारे में

Leaflet का L.tileLayer चित्र बनाता है; जबकि ये वेक्टर टाइलें हैं। फिर भी एक Leaflet नक्शा इनका उपयोग कर सकता है, और दोनों ही तरीकों में आपके मार्कर, पॉपअप और कंट्रोल वैसे ही बने रहते हैं। दोनों तरीके OpenStreetMap टाइलों से माइग्रेट करना में दिए गए हैं।

छह। PMTiles लाइब्रेरी से आर्काइव पढ़ें

कोई नक्शा नहीं, केवल डेटा। स्क्रिप्ट, परीक्षण और ऐसी किसी भी चीज़ के लिए उपयोगी जो चित्र नहीं है।

import { PMTiles, FetchSource } from "pmtiles";

const archive = new PMTiles(new FetchSource("https://tiles.jasontally.com/basemap.pmtiles"));

const header = await archive.getHeader();
console.log(header.minZoom, header.maxZoom);        // 0 15
console.log(header.numAddressedTiles);              // 1431655765

const metadata = await archive.getMetadata();
console.log(metadata.name);                          // "Protomaps Basemap"

const tile = await archive.getZxy(3, 4, 2);          // z, x, y
console.log(tile.data.byteLength);

दोनों क्लासों पर ध्यान दें। FetchSource HTTP पर बाइट रीडर है, और PMTiles वह रीडर है जो उसके ऊपर बैठता है और फ़ॉर्मेट को समझता है। FileSource स्थानीय फ़ाइल के लिए FetchSource के समतुल्य है; उसे URL स्ट्रिंग देने पर वह काम नहीं करेगा।

यह आर्काइव एक स्नैपशॉट है, लाइव फ़ीड नहीं। समय की जानकारी यह डेटा कितना नया है? में दी गई है।

OpenStreetMap टाइलों से माइग्रेट करना

टाइल उपयोग नीति का ब्लॉक, 403 त्रुटि, और उनके समाधान। न कोई कुंजी, न कोई कोटा।

नक्शे पर ब्लॉक क्यों दिखता है

App is not following the tile usage policy of OpenStreetMap’s volunteer-run servers

General block: app is not following the tile usage policy of openstreetmap volunteer-run servers

403 Forbidden — tile.openstreetmap.org

टाइल सर्वरों ने टाइल उपयोग नीति के तहत जानबूझकर नक्शे के स्थान पर वह छवि भेजी है। यह कोई खराबी नहीं है, और URL ठीक करने से यह नहीं हटता।

लोग सबसे पहले क्या आज़माते हैं:

कार्यालय, स्कूल, VPN और मोबाइल नेटवर्क एक ही IP पता साझा करते हैं, और ब्लॉक ऐप के साथ-साथ पतों पर भी लागू होते हैं। अपनी तरफ़ से आप यह नहीं बता सकते कि आप पर कौन सा ब्लॉक लगा है।

इसलिए उन सर्वरों से अनुरोध करना बंद करें। उनसे हटने के तीन तरीके हैं।

Leaflet बनाए रखें

protomaps-leaflet Leaflet में वेक्टर टाइलें बनाता है। यह स्वयं आर्काइव को पढ़ता है और एक सामान्य लेयर के रूप में जुड़ जाता है, जिससे मार्कर, पॉपअप, GeoJSON और कंट्रोल अपनी जगह बने रहते हैं। इस आर्काइव के साथ जाँची गई एक प्रति यहाँ उपलब्ध है: https://tiles.jasontally.com/vendor/protomaps-leaflet.js.

पहले:

<link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css">
<script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js"></script>

<script>
  const map = L.map("map").setView([48.85, 2.35], 12);

  L.tileLayer("https://tile.openstreetmap.org/{z}/{x}/{y}.png", {
    maxZoom: 19,
    attribution: '&copy; <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors'
  }).addTo(map);
</script>

बाद में:

<link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css">
<script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js"></script>
+ <script src="https://tiles.jasontally.com/vendor/protomaps-leaflet.js"></script>

<script>
  const map = L.map("map").setView([48.85, 2.35], 12);

-  L.tileLayer("https://tile.openstreetmap.org/{z}/{x}/{y}.png", { ... }).addTo(map);
+  protomapsL.leafletLayer({
+    url: "https://tiles.jasontally.com/basemap.pmtiles",
+    flavor: "light",
+    lang: "en"
+  }).addTo(map);
</script>

protomaps-leaflet अपस्ट्रीम पर मेंटेनेंस मोड में है: केवल सुधार, नए फ़ीचर नहीं। मौजूदा Leaflet ऐप के लिए यह ठीक है। नया काम MapLibre GL पर शुरू किया जाना चाहिए।

Leaflet रखें, MapLibre से रेंडर करें

@maplibre/maplibre-gl-leaflet Leaflet के टाइल पेन में एक MapLibre नक्शा रखता है। जब आप Leaflet ऐप में ही ऊपर दी गई स्टाइलों में से किसी एक का, या टेरेन और हिलशेड का उपयोग करना चाहें, तब इसे चुनें।

<link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css">
<link rel="stylesheet" href="https://tiles.jasontally.com/vendor/maplibre-gl.css">
<script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js"></script>
<script src="https://tiles.jasontally.com/vendor/maplibre-gl.js"></script>
<script src="https://tiles.jasontally.com/vendor/pmtiles.js"></script>
<script src="https://cdn.jsdelivr.net/npm/@maplibre/maplibre-gl-leaflet@0.1.4/dist/leaflet-maplibre-gl.js"></script>

<script>
  // The style's source is pmtiles://, so MapLibre needs the protocol first.
  maplibregl.addProtocol("pmtiles", new pmtiles.Protocol().tile);

  const map = L.map("map", { minZoom: 1 }).setView([48.85, 2.35], 12);

  const gl = L.maplibreGL({
    style: "https://tiles.jasontally.com/styles/light.json"
  }).addTo(map);

  // gl.getMaplibreMap() is the MapLibre map, for sources and layers.
</script>

MapLibre GL पर जाएँ

एक लाइब्रेरी, कोई एडेप्टर नहीं, और ऊपर दी गई स्टाइलें जैसी हैं वैसी ही काम करती हैं। पूरा पेज एक। पेज पर नक्शा लगाएँ में है। इस बदलाव में मुख्य रूप से निर्देशांकों का क्रम पलटता है:

LeafletMapLibre GL
L.map("map").setView([lat, lng], z)new maplibregl.Map({ container: "map", center: [lng, lat], zoom: z })
L.tileLayer(url).addTo(map)वेक्टर सोर्स वाली एक स्टाइल; ऊपर देखें
L.marker([lat, lng]).bindPopup(html)new maplibregl.Marker().setLngLat([lng, lat]).setPopup(new maplibregl.Popup().setHTML(html))
L.geoJSON(data)addSource(id, { type: "geojson", data }), फिर addLayer
L.control.scale()new maplibregl.ScaleControl()
map.invalidateSize()map.resize()

setView([lat, lng]) पहले अक्षांश (latitude) लेता है; जबकि हर MapLibre कॉल [lng, lat] लेता है। यदि नक्शा गलत गोलार्ध में दिख रहा है, तो कारण यही है, टाइलें नहीं। स्टाइल लोड होने से पहले जोड़े गए सोर्स और लेयर बिना किसी त्रुटि के छोड़ दिए जाते हैं, इसलिए उन्हें map.on("load", …) के अंदर जोड़ें।

“archive contains MVT vector tiles, but leafletRasterLayer is for displaying raster tiles”

यह pmtiles.leafletRasterLayer है, जो रास्टर PMTiles को छवियों के रूप में दिखाता है। ये वेक्टर टाइलें हैं, इसलिए वह इन्हें अस्वीकार कर देता है। कोई भी विकल्प इसे नहीं बदल सकता, और यहाँ कोई रास्टर प्रति नहीं है। ऊपर दिए गए विकल्पों में से किसी एक का उपयोग करें।

“download.openstreetmap.fr returned 403”

वह एक एक्सट्रैक्ट और रेप्लिकेशन मिरर है, टाइल सर्वर नहीं। अक्टूबर 2026 में अत्यधिक डाउनलोड के बाद उसने कई पतों को ब्लॉक कर दिया था, और ऑपरेटरों ने कहा कि वे मामले के आधार पर पहुँच बहाल करेंगे। यहाँ किसी भी चीज़ को उसकी आवश्यकता नहीं है: यह आर्काइव Protomaps रिलीज़ से आता है, इसलिए आपको स्वयं .osm.pbf असेंबल नहीं करना पड़ता। यदि आप OSM डेटा लेते हैं, तो मिनट स्ट्रीम के बजाय आवधिक एक्सट्रैक्ट लें।

स्टाइलें

वही टाइलें, अलग रंग। एक चुनें, कॉपी करें, बदलें — यह आपकी है।

स्टाइलदिखावटफ़ाइल

टाइलों में क्या है

पेज लोड होते समय आर्काइव के अपने मेटाडेटा से पढ़ा गया। किसी भी स्टाइल को इन्हीं लेयर नामों का उपयोग करना चाहिए।

सोर्स लेयरज़ूमफ़ील्ड
लोड हो रहा है…

यह सेवा क्या नहीं है

स्पष्ट उत्तर, ताकि बाद में आपको कोई आश्चर्य न हो।

यह डेटा कितना नया है?

ये टाइलें Protomaps Basemap की एक प्रति हैं, जिसे महीने में एक बार दोबारा बनाया जाता है।

स्टाइल JSON

open raw