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 });
ਤਿੰਨ। ਆਪਣੀ ਬਣਾਈ ਸਟਾਈਲ ਕਿੱਥੇ ਰੱਖੀਏ
ਉੱਪਰ ਬਿਲਡਰ ਵਿੱਚ ਦਿੱਤਾ 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 ਹੈ, ਜੋ ਇਹ ਦੱਸਦਾ ਹੈ ਕਿ ਰੂਟ ਨੰਬਰ ਵਿੱਚ ਕਿੰਨੇ ਅੱਖਰ ਹਨ, ਇਹ ਨਹੀਂ ਕਿ ਉਹ ਅੱਖਰ ਕੀ ਹਨ, ਇਸ ਲਈ ਉਸ ਤੋਂ ਬਣਾਈ ਗਈ ਸ਼ੀਲਡ ਹਰ ਮੋਟਰਵੇਅ ਉੱਤੇ ਇੱਕ ਖਾਲੀ ਆਕਾਰ ਵਾਂਗ ਦਿਖੇਗੀ।
ਖੁਦ ਇੱਕ ਲੇਅਰ ਲਿਖਣਾ, ਅਤੇ ਉਸ ਵਿੱਚ ਰੰਗ ਭਰਨਾ
ਇੱਕ ਲੇਅਰ ਵਿੱਚ ਫ਼ਿਲਟਰ, ਜ਼ੂਮ, ਆਕਾਰ ਅਤੇ ਰੰਗ ਹੁੰਦਾ ਹੈ। ਫ਼ਿਲਟਰ ਦੀਆਂ ਦੋ ਗੱਲਾਂ ਹਰ ਕਿਸੇ ਨੂੰ ਉਲਝਾਉਂਦੀਆਂ ਹਨ, ਅਤੇ ਦੋਵੇਂ ਬਿਨਾਂ ਕਿਸੇ ਐਰਰ ਦੇ ਫੇਲ੍ਹ ਹੋ ਜਾਂਦੀਆਂ ਹਨ:
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 ਫ਼ੀਲਡ ਨੂੰ ਪੜ੍ਹਦੀ ਹੈ, ਜਿਸ ਦੇ ਪਿੱਛੇ ਹੇਲੋ (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 ਨਹੀਂ ਹੈ, ਇਸੇ ਕਰਕੇ ਉਸ ਦੀ ਮੰਗ ਕਰਨ ਵਾਲੀ ਸਟਾਈਲ ਦੇ ਸਾਰੇ ਲੇਬਲ ਚੁੱਪਚਾਪ ਗਾਇਬ ਹੋ ਜਾਂਦੇ ਹਨ।
ਕਿਹੜਾ ਹੋਸਟ ਤੇਜ਼ ਹੈ, ਅਤੇ ਇਸ ਬਾਰੇ ਕੀ ਫੈਸਲਾ ਲਿਆ ਗਿਆ। ਅੰਦਾਜ਼ੇ ਦੀ ਬਜਾਏ ਮਾਪਿਆ ਗਿਆ: ਵਾਰੀ-ਵਾਰੀ ਕੀਤੀਆਂ ਬੇਨਤੀਆਂ, ਇੱਕ ਸਮੇਂ ਇੱਕ, ਇੱਕੋ ਕਨੈਕਸ਼ਨ ਉੱਤੇ, ਪਹਿਲੇ ਤਿੰਨ ਸੈਂਪਲ ਛੱਡ ਕੇ, ਅਤੇ ਟ੍ਰਾਂਸਫ਼ਰ ਤੋਂ ਪਹਿਲੇ ਬਾਈਟ ਦੇ ਸਮੇਂ ਨੂੰ ਵੱਖ ਕਰਕੇ। ਉਸ ਟੈਸਟ ਵਿੱਚ ਇੱਕ 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ਇੱਕ ਵੱਖਰਾ Referer ਭੇਜਦਾ ਹੈ।
ਦਫ਼ਤਰ, ਸਕੂਲ, 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 ਉੱਤੇ ਅਤੇ ਹਰ ਉਸ ਬ੍ਰਾਊਜ਼ਰ ਵਿੱਚ ਕੈਸ਼ ਕੀਤੇ ਹਿੱਸਿਆਂ ਨੂੰ ਅਯੋਗ ਕਰ ਦਿੰਦਾ ਹੈ ਜਿਸ ਕੋਲ ਉਹ ਪਹਿਲਾਂ ਤੋਂ ਹਨ, ਅਤੇ ਹਰ ਰੀਬਿਲਡ ਵਿੱਚ ਬਿਲਡ ਸਮਾਂ ਲੱਗਦਾ ਹੈ।
- ਜ਼ਿਆਦਾਤਰ ਮਹੀਨਿਆਂ ਵਿੱਚ ਕੁਝ ਨਹੀਂ ਕਰਨਾ ਪੈਂਦਾ। ਰੀਬਿਲਡ ਸਿਰਫ਼ ਉਦੋਂ ਹੁੰਦਾ ਹੈ ਜਦੋਂ ਅੱਪਸਟ੍ਰੀਮ ਨੇ ਕੋਈ ਨਵੀਂ ਰੀਲੀਜ਼ ਪ੍ਰਕਾਸ਼ਿਤ ਕੀਤੀ ਹੋਵੇ।
- ਇਸ ਵੇਲੇ ਕਿਹੜਾ ਅੱਪਸਟ੍ਰੀਮ ਬਿਲਡ ਵਰਤੋਂ ਵਿੱਚ ਹੈ? ਇਸ ਪੇਜ ਦੇ ਉੱਪਰ ਦਿੱਤੇ ਆਰਕਾਈਵ ਮੈਟਾਡੇਟਾ ਬਟਨ ਦੀ ਵਰਤੋਂ ਕਰੋ। ਇਹ ਆਰਕਾਈਵ ਦਾ ਆਪਣਾ ਹੈਡਰ ਪੜ੍ਹਦਾ ਹੈ, ਇਸ ਲਈ ਜਵਾਬ ਹਮੇਸ਼ਾ ਤਾਜ਼ਾ ਹੁੰਦਾ ਹੈ ਨਾ ਕਿ ਇਸ ਪੇਜ ਉੱਤੇ ਲਿਖੀ ਕੋਈ ਪੁਰਾਣੀ ਜਾਣਕਾਰੀ।
- ਰੀਬਿਲਡ ਤੁਰੰਤ ਨਹੀਂ ਹੁੰਦਾ। ਇਹ ਇੱਕ-ਇੱਕ ਕਰਕੇ ਲਗਭਗ ਸਾਢੇ ਛੇ ਘੰਟਿਆਂ ਵਿੱਚ ਫੈਲੇ ਤੇਰਾਂ ਵੱਖ-ਵੱਖ ਰੀਬਿਲਡ ਹਨ। ਉਸ ਸਮੇਂ ਦੇ ਜ਼ਿਆਦਾਤਰ ਹਿੱਸੇ ਦੌਰਾਨ ਇਹ ਕਾਪੀ ਦੋ ਅੱਪਸਟ੍ਰੀਮ ਬਿਲਡਾਂ ਦਾ ਮਿਸ਼ਰਣ ਹੁੰਦੀ ਹੈ। ਇਸ ਦੌਰਾਨ ਮੰਗੀ ਗਈ ਕੋਈ ਟਾਈਲ ਰੀਡਰ ਵੱਲੋਂ ਦੱਸੇ ਗਏ ਬਿਲਡ ਦੀ ਬਜਾਏ ਨਵੇਂ ਬਿਲਡ ਤੋਂ ਆ ਸਕਦੀ ਹੈ, ਜੋ ਟੁੱਟੇ ਹੋਏ ਨਕਸ਼ੇ ਵਜੋਂ ਨਹੀਂ ਸਗੋਂ ਗਲਤ ਥਾਂ ਦੀ ਟਾਈਲ ਵਜੋਂ ਦਿਖਦੀ ਹੈ।
- ਰੀਬਿਲਡ ਖੁੰਝ ਵੀ ਸਕਦਾ ਹੈ। ਇਹ ਇੱਕ ਬੈਸਟ-ਐਫ਼ਰਟ ਕੰਮ ਹੈ, ਕੋਈ ਗਾਰੰਟੀ ਨਹੀਂ। ਜੇਕਰ ਇੱਕ ਪੜਾਅ ਫੇਲ੍ਹ ਹੋ ਜਾਂਦਾ ਹੈ, ਤਾਂ ਬਾਕੀ ਕਾਪੀ ਪਿਛਲੇ ਅੱਪਸਟ੍ਰੀਮ ਬਿਲਡ ਉੱਤੇ ਹੀ ਰਹਿੰਦੀ ਹੈ। ਇਹ ਫਿਰ ਵੀ ਇੱਕ ਚੱਲਦਾ ਨਕਸ਼ਾ ਹੈ।