Vector Tiles (MVT) with pg_tileserv, PostGIS, Leaflet and Python Flask
Tired of slow maps? Say goodbye to heavy WMS and hello to blazing-fast vector tiles! In this mini tutorial, we’ll build a lightning-fast vector tile server using PostGIS + pg_tileserv + Leaflet — no GeoServer needed. Fully dynamic, lightweight, and perfect for mobile-friendly GIS apps.
🧠 What is pg_tileserv
?
pg_tileserv
is a super-lightweight vector tile server developed by CrunchyData. It serves raw .pbf
tiles directly from your PostGIS database, no caching or tiling middleware required.
It’s built using Golang, and it outputs tiles in Mapbox Vector Tile (MVT) format, meaning you can render beautiful, dynamic maps in Leaflet or MapLibre with total frontend control.
⚙️ Step-by-Step: Serve Vector Tiles in Minutes
-
Download & Install
-
Install Go: https://go.dev/dl
-
Check:
go version
-
Build & Run
cd D:\pg_tileserv
go build -o pg_tileserv.exe
set DATABASE_URL=postgresql://postgres:admin123@localhost:5432/your_db
pg_tileserv.exe
-
Visit the Interface
-
👉
http://localhost:7800/
-
See available layers (e.g.
public.grid_lines
)
-
-
Render in Leaflet
Use Leaflet.VectorGrid to render.pbf
tiles with full control — color, filter, interactivity — all from the frontend!Feature Raster Tiles (WMS) Vector Tiles (pg_tileserv) Styling Static (SLD) Dynamic (JS, CSS) File Size Heavy Compact .pbf
Rendering Server-side Client-side Speed Slower ⚡ Ultra-fast Interactivity Limited Popups, filters, hover Zoom Levels Fixed Fully flexible 💡 Bonus Tips
-
Add SQL filtering to control tiles (like CQL for WMS) dynamically.
-
Use bounding box parameters for real-time updates.
-
Combine with Flask API for full-stack GIS control.
📦 Stack Used
-
PostgreSQL + PostGIS
-
pg_tileserv
-
Python + Flask
-
Leaflet + VectorGrid
-
Comments
Leave a Reply