Web maps & tiles

Getting a dataset into a browser: tile pyramids, vector tiles, PMTiles and MapLibre styling.

A tile pyramid: each zoom level holds four times as many tiles as the one above it. every zoom level is four times the lastz0 · 1 tilez1 · 4 tilesz2 · 16 tilesz14 · 268 millionWhich is why nobody renders the whole pyramid — you render the part somebody asks for

Getting a dataset into a browser means giving up the ability to send all of it. A tile pyramid is the standard answer: the world cut into squares at each zoom level, four times as many at each step down, so the client fetches only the handful covering the current view.

That structure explains the constraints. Web Mercator is not a choice, it is what the pyramid is built in. Zoom level is a resolution decision, and generalising geometry per level is what keeps a vector tile under its budget. PMTiles and MBTiles are the same tiles in one file rather than millions of them. And every styling decision happens in the browser, on the client’s machine, against a budget measured in megabytes.

The pages below cover what tiles are, how to generate and serve them, how to style them, and why a layer sometimes does not appear at all.

Learning paths run through this topic too — see the end of this page.

🧭 Start with the concepts

The ideas the how-to guides below assume you already have.

Show every concept in this topic

⚙️ Then do the task

Step-by-step walkthroughs with code you can copy and adapt.

Show every how-to guide in this topic

🔧 When it breaks

The errors this topic produces, with the cause explained rather than just the command.

Show every fix in this topic

Related topics

Subjects that keep coming up alongside this one, most overlap first.

Keep browsing

Web maps & tiles sits in Analysis. Every topic on the site is listed on the topics index.