Protomaps Basemap టైల్స్
మొత్తం Protomaps Basemap, జూమ్ 0 నుండి 15 వరకు, సాధారణ HTTP ద్వారా ఒకే PMTiles ఆర్కైవ్గా అందించబడుతుంది. ఏదైనా PMTiles క్లయింట్ని ఈ URL కి పాయింట్ చేస్తే అది పనిచేస్తుంది.
https://tiles.jasontally.com/basemap.pmtiles
- API కీ అవసరం లేదుసైన్ అప్ చేయాల్సిన పని లేదు, మీ కోడ్లో టోకెన్ ఉండదు.
- రేట్ పరిమితి లేదుథ్రాట్లింగ్ లేదు, కోటా లేదు, బర్స్ట్ పరిమితి లేదు.
- నెలవారీసరికొత్త Protomaps విడుదల నుండి నెలకు ఒకసారి మళ్లీ నిర్మించబడుతుంది.
OpenStreetMap టైల్ బ్లాక్ అయిందా, లేదా tile.openstreetmap.org నుండి 403 వస్తోందా? ఇక్కడ ప్రారంభించండి.
ప్రయత్నించండి
అదే ఆర్కైవ్ మూడు స్టైల్స్లో ఉంది. స్టైల్ మార్చినప్పుడు ఇప్పటికే లోడ్ అయిన టైల్స్ అలాగే ఉంటాయి, కాబట్టి మార్పు వెంటనే కనిపిస్తుంది.
మీ సొంత స్టైల్ తయారు చేసుకోండి
రంగును మార్చండి లేదా లేయర్ను ఆఫ్ చేయండి, మ్యాప్ వెంటనే అప్డేట్ అవుతుంది. ఆపై స్టైల్ 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\">© 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 });
మూడు. మీరు తయారు చేసిన స్టైల్ను ఎక్కడ ఉంచాలి
పై బిల్డర్లోని స్టైల్ 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, MapLibre అడిగే 256 రేంజ్లుగా (ఒక్కోసారి 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 ఉంది, అది రూట్ నంబర్లో ఎన్ని అక్షరాలు ఉన్నాయో చెబుతుంది కానీ అవి ఏమిటో చెప్పదు, కాబట్టి దాని నుండి గీసిన షీల్డ్ ప్రతి మోటార్వేపై ఖాళీ ఆకారంగా కనిపిస్తుంది.
మీరే స్వయంగా ఒక లేయర్ రాసి, దానికి రంగు వేయడం
లేయర్ అంటే ఒక ఫిల్టర్, ఒక జూమ్, ఒక ఆకారం మరియు ఒక రంగు. ఫిల్టర్లోని రెండు విషయాలు అందరినీ తికమక పెడతాయి, మరియు రెండూ ఎలాంటి ఎర్రర్ చూపించకుండానే విఫలమవుతాయి:
kindఅనేది స్థూలమైన పేరు. రోడ్ల కోసం ఇదిhighway,major_road,minor_road,path,railలలో ఒకటి. అప్స్ట్రీమ్ డాక్యుమెంటేషన్లోని పేర్లు —motorway,primary,residential— అనేవిkind_detailవిలువలు. వాటితోkindని ఫిల్టర్ చేసే లేయర్ ఏమీ గీయదు మరియు ఆ విషయాన్ని ఎక్కడా చెప్పదు.- లేయర్ తన సొంత
minzoomకంటే తక్కువ జూమ్లో గీయబడదు. ఆర్కైవ్ z15 వద్ద ఆగిపోతుంది, కాబట్టి minzoom 16 ఉన్న లేయర్ అసలు గీయబడదు. చాలా ఫీచర్లు తమ సొంతmin_zoomని కూడా కలిగి ఉంటాయి (ఏ జూమ్ వద్ద వాటిని చూపించవచ్చో డేటా చెప్పే స్థాయి), మరియు ఇక్కడి స్టైల్స్ దాన్ని కూడా పరీక్షిస్తాయి.
కాబట్టి ఒక రోడ్డు, దాని పేరు, మరియు ఆ లైన్ను ఆఫ్ చేయడానికి ఒక టాగుల్:
{
"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 ఫీల్డ్ను చదివే సింబల్ లేయర్, దాని వెనుక హాలో ఉండవచ్చు లేదా ఏమీ లేకపోవచ్చు. గ్లిఫ్ లేకపోతే ఎలాంటి ఎర్రర్ రాదు, కాబట్టి మీరు అడిగే ఫాంట్ స్టాక్ ఈ హోస్ట్లోని రెండింటిలో ఒకటై ఉండాలి:
{
"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 ని సరిచేయడం వల్ల ఇది తొలగిపోదు.
ప్రజలు మొదట ప్రయత్నించేవి:
a/b/cలను కానానికల్ హోస్ట్కు మార్చడం వల్ల బ్లాక్ తొలగిపోదు. కానానికల్ URL అవసరమే, కానీ బ్లాక్ అనేది కనిపించిన యాప్కు లేదా Referer కు జోడించబడి ఉంటుంది, హోస్ట్నేమ్కు కాదు.- మళ్లీ మళ్లీ ప్రయత్నించడం వల్ల పరిస్థితి ఇంకా దిగజారుతుంది. అధిక అభ్యర్థనల పరిమాణాన్ని అడ్డుకోవడానికే ఈ బ్లాక్ ఉంది.
- డిస్క్ నుండి తెరిచిన పేజీని ఏ హెడర్ ట్రిక్ రక్షించలేదు.
file://ఎలాంటిRefererపంపదు. దానికి బదులుగాX-Requested-Withపంపాలంటే ప్రతి టైల్కు CORS ప్రీఫ్లైట్ అవసరం అవుతుంది, మరియు టైల్ సర్వర్లు ఆ ప్రీఫ్లైట్ను కూడా నిరాకరిస్తాయి. Firefox మరియు Chromium ఏ హెడర్లను పంపుతాయనే విషయంలో భిన్నంగా ఉంటాయి; కానీ నియమం రెండింటికీ ఒకటే. localhostలో పనిచేసి, లైవ్ సైట్లో బ్లాక్ అయిందా? దానికి కారణం ఆరిజిన్. మీ డొమైన్ యొక్క Referer బ్లాక్ చేయబడింది, మరియుlocalhostవేరే దాన్ని పంపుతుంది.
కార్యాలయాలు, పాఠశాలలు, VPNలు మరియు మొబైల్ నెట్వర్క్లు ఒకే చిరునామాను పంచుకుంటాయి, మరియు బ్లాక్లు యాప్లతో పాటు చిరునామాలకు కూడా వర్తిస్తాయి. మీ వైపు నుండి మీకు ఏ బ్లాక్ విధించబడిందో మీరు చెప్పలేరు.
కాబట్టి ఆ సర్వర్లను అడగడం ఆపండి. వాటి నుండి బయటపడటానికి మూడు మార్గాలు ఉన్నాయి.
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: '© <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>
flavorవిలువlight,dark,white,grayscaleలేదాblackకావచ్చు. అవి ఆ లైబ్రరీ యొక్క థీమ్లు, పైన ఉన్న స్టైల్స్ కావు, కాబట్టి రంగులు ఖచ్చితంగా సరిపోలవు.- లేబుల్లు సిస్టమ్ ఫాంట్లో గీసిన కాన్వాస్ టెక్స్ట్. గ్లిఫ్ URL లేదు, 404 ఇచ్చే ఫాంట్ లేదు.
- z15 అనేది లోతైన టైల్. లేయర్ దానిని దాటి ఓవర్జూమ్ చేస్తుంది, మరియు
maxDataZoom: 15ఇప్పటికే డిఫాల్ట్గా ఉంటుంది.
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>
- ముందుగా ప్రోటోకాల్ను రిజిస్టర్ చేయండి.
addProtocolలైన్ లేకపోతే కన్సోల్URL scheme "pmtiles" is not supportedఅని చెబుతుంది మరియు మ్యాప్ ఖాళీగా ఉంటుంది. - MapLibre అనేది Leaflet కంటే ఒక జూమ్ తక్కువలో గీస్తుంది. Leaflet యొక్క 256 px తో పోలిస్తే దీని టైల్స్ 512 px ఉంటాయి, కాబట్టి
minzoom12 ఉన్న లేయర్ Leaflet z13 కి చేరుకున్నప్పుడు కనిపిస్తుంది. - Leaflet ఇంకా పైనే గీస్తుంది. కాన్వాస్ టైల్ పేన్లో ఉంటుంది, కాబట్టి మార్కర్లు మరియు ఓవర్లేలు రాస్టర్ లేయర్పై పనిచేసినట్లే పనిచేస్తాయి.
MapLibre GL కి మారండి
ఒకే లైబ్రరీ, అడాప్టర్ లేదు, మరియు పై స్టైల్స్ ఉన్నవి ఉన్నట్లుగా పనిచేస్తాయి. పూర్తి పేజీ ఒకటి. పేజీలో మ్యాప్ను ఉంచండి లో ఉంది. ఈ మార్పులో ప్రధానమైనది కోఆర్డినేట్ల క్రమాన్ని మార్చడం:
| Leaflet | MapLibre 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 డేటాను తీసుకుంటుంటే, నిమిషాల స్ట్రీమ్కు బదులుగా పీరియాడిక్ ఎక్స్ట్రాక్ట్ను తీసుకోండి.
స్టైల్స్
అవే టైల్స్, వేర్వేరు రంగులు. ఒకదాన్ని ఎంచుకోండి, కాపీ చేయండి, మార్చుకోండి, అది మీదే.
| స్టైల్ | ఎలా కనిపిస్తుంది | ఫైల్ |
|---|
టైల్స్లో ఏముంది
పేజీ లోడ్ అయినప్పుడు ఆర్కైవ్ యొక్క సొంత మెటాడేటా నుండి చదవబడుతుంది. ఒక స్టైల్ తప్పనిసరిగా ఉపయోగించాల్సిన లేయర్ పేర్లు ఇవే.
| సోర్స్ లేయర్ | జూమ్ | ఫీల్డ్లు |
|---|---|---|
| లోడ్ అవుతోంది… | ||
ఇది ఏమి కాదు
స్పష్టమైన సమాధానాలు, తద్వారా తరువాత ఇక్కడ ఏదీ మిమ్మల్ని ఆశ్చర్యపరచదు.
- సర్వీస్ లెవల్ గ్యారెంటీ లేదు. ఇది వెనుక ఎలాంటి ఒప్పందం లేని ఉచిత సేవ. ఇది నెమ్మదిగా ఉండవచ్చు, డౌన్ కావచ్చు, మరియు URL ఇంకా డేటా ముందస్తు నోటీసు లేకుండా మారవచ్చు లేదా కనుమరుగైపోవచ్చు. మీ ప్రొడక్ట్ దీనిపై ఆధారపడి ఉంటే, టైల్స్ యొక్క మీ సొంత కాపీని హోస్ట్ చేసుకోండి లేదా ఎవరి నుండైనా సపోర్ట్ ఉన్న ప్లాన్ను కొనుగోలు చేయండి.
- ఇది ఏ గంటకాగంట తాజాగా ఉండదు. ఈ కాపీ సరికొత్త Protomaps విడుదల యొక్క స్నాప్షాట్, లైవ్ ఫీడ్ కాదు. ఈరోజు చేసిన మార్పులు ఇందులో ఉండవు. సమయ వివరాలు ఇది ఎంత తాజాది? లో ఉన్నాయి.
- మొత్తం ఫైల్ డౌన్లోడ్ కుదరదు. అభ్యర్థనలకు గరిష్టంగా 512 KiB రేంజ్లలో సమాధానం ఇవ్వబడుతుంది, ఒక PMTiles క్లయింట్ అడిగేది అంతే. ఒకే అభ్యర్థనలో మొత్తం ఆర్కైవ్ను అడిగితే
416వస్తుంది, మరియు అది సరైనదే. - ఆట్రిబ్యూషన్ తప్పనిసరి. ఈ టైల్స్ OpenStreetMap నుండి రూపొందించబడ్డాయి. మీ స్టైల్లో లేదా మీ మ్యాప్పై ఆట్రిబ్యూషన్ లైన్ను ఉంచండి.
ఇది ఎంత తాజాది?
ఈ టైల్స్ Protomaps Basemap యొక్క కాపీ, ఇవి నెలకు ఒకసారి మళ్లీ నిర్మించబడతాయి.
- నెలకు ఒకసారి మళ్లీ నిర్మించబడుతుంది. బిల్డ్ ప్రతి నెల మొదటి ఆదివారం నాడు 00:30 మరియు 07:00 UTC మధ్య రన్ అవుతుంది; మూడు సంవత్సరాల విడుదల చరిత్రలో అప్స్ట్రీమ్ ప్రచురించని ఏకైక సమయ విండో ఇదే. వారానికోసారి కాకుండా నెలవారీగా చేయడానికి కారణం ఏమిటంటే, కొత్త ఆర్కైవ్ CDN లో మరియు ఇప్పటికే క్యాష్ ఉన్న ప్రతి బ్రౌజర్లో క్యాష్ చేసిన భాగాలను చెల్లనిదిగా చేస్తుంది, మరియు ప్రతి పునర్నిర్మాణానికి బిల్డ్ సమయం ఖర్చవుతుంది.
- చాలా నెలల్లో చేయాల్సిన పని ఏమీ ఉండదు. అప్స్ట్రీమ్ కొత్త విడుదలను ప్రచురించినప్పుడు మాత్రమే పునర్నిర్మాణం జరుగుతుంది.
- ప్రస్తుతం ఏ అప్స్ట్రీమ్ బిల్డ్ వాడుకలో ఉంది? ఈ పేజీ పైన ఉన్న ఆర్కైవ్ మెటాడేటా బటన్ను ఉపయోగించండి. అది ఆర్కైవ్ యొక్క సొంత హెడర్ను చదువుతుంది, కాబట్టి ఈ పేజీలో పాత సమాచారం మిగిలిపోయే అవకాశం లేకుండా సమాధానం ఎల్లప్పుడూ తాజాగా ఉంటుంది.
- పునర్నిర్మాణం తక్షణమే జరిగిపోదు. ఇది సుమారు ఆరున్నర గంటల పాటు ఒకేసారి ఒకటి చొప్పున జరిగే పదమూడు వేర్వేరు పునర్నిర్మాణాలు. ఆ సమయ విండోలో ఎక్కువ భాగం ఈ కాపీ రెండు అప్స్ట్రీమ్ బిల్డ్ల మిశ్రమంగా ఉంటుంది. ఆ సమయంలో మీరు అభ్యర్థించే టైల్ రీడర్ చూపించిన బిల్డ్ నుండి కాకుండా కొత్త బిల్డ్ నుండి రావచ్చు; ఇది పగిలిన మ్యాప్లా కాకుండా తప్పు చోటు నుండి వచ్చిన టైల్లా కనిపిస్తుంది.
- పునర్నిర్మాణం తప్పిపోవచ్చు. ఇది సాధ్యమైనంత ఉత్తమంగా చేసే ప్రయత్నం (best-effort job), గ్యారెంటీ కాదు. ఒక దశ విఫలమైతే, మిగిలిన కాపీ మునుపటి అప్స్ట్రీమ్ బిల్డ్లోనే ఉంటుంది. అయినప్పటికీ అది పనిచేసే మ్యాప్గానే ఉంటుంది.