Web maps & tiles
Getting a dataset into a browser: tile pyramids, vector tiles, PMTiles and MapLibre styling.
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.
🧭 Start with the concepts
The ideas the how-to guides below assume you already have.
- Web Map Tiles Explained: XYZ, Zoom Levels and the Tile Pyramid
- Vector Tiles Explained: MVT, Layers and Why They Are Not GeoJSON
- Generalisation for Zoom Levels Explained
- PMTiles and MBTiles Explained: Tile Archives Without a Server
- Serving Spatial Data Explained: Files, Features and Tiles
- Dynamic Tile Server or Static Tiles: What to Serve
Show every concept in this topic
⚙️ Then do the task
Step-by-step walkthroughs with code you can copy and adapt.
- How to Prepare a GeoDataFrame for the Web
- How to Build Vector Tiles from a GeoDataFrame in Python
- How to Serve a Web Map from PMTiles with MapLibre
- How to Render Raster Tiles from a COG in Python
- How to Export a Static Tile Pyramid for Offline Use
- How to Style Data-Driven Colours in a Web Map
Show every how-to guide in this topic
- How to Add Interactivity and Popups to a Web Map
- How to Publish a GeoJSON API from a GeoDataFrame with FastAPI
- How to Index Data by Quadkey and Web Map Tile
- How to publish a 3D building layer to a web map
- How to Overlay a Georeferenced Old Map on a Web Map
- How to Make a Time-Slider Web Map in Python
- How to Make an Interactive Arc Map of Flows with pydeck
- How to Make a Heatmap With Folium in Python
- How to Cluster Thousands of Markers With Folium in Python
- How to Make a Folium Choropleth With Tooltips in Python
- How to Save a Folium Map as a PNG Image in Python
- How to Make an Interactive Map With GeoPandas explore()
- How to Make a 3D Map With pydeck in Python
- How to Map a Million Points With Lonboard in Python
🔧 When it breaks
The errors this topic produces, with the cause explained rather than just the command.
Learning paths through this topic
A curated route rather than a list — the guides in the order that builds on itself.
Related topics
Subjects that keep coming up alongside this one, most overlap first.