Concepts
Understand the core concepts behind spatial data in Python before diving into tasks and workflows.
Every practical GIS workflow rests on a small set of foundational ideas. What is a GeoDataFrame? What does a CRS actually do? How do raster and vector data differ, and when should you use each? These guides answer those questions directly — without padding, without assumed expertise.
If you're just starting with Python GIS, work through these pages first. They'll give you the vocabulary and mental models that make all the how-to guides easier to follow. If you're already working in the field, these pages make useful references when a concept needs refreshing.
The collection now runs the length of the learning paths. Alongside the starting points — GeoPandas, Shapely, CRS, EPSG codes, Rasterio, vector versus raster — you will find the concepts that decide whether a workflow survives production: what makes a geometry valid, why slivers and gaps appear, how doubles store coordinates, what GDAL actually is, how a spatial index makes a join fast, what the GIL does and does not block, what a pipeline is made of, and how the QGIS Processing framework and its data providers fit together.
Browse by topic
The fastest way in. Each topic page pairs these concepts with the tasks that use them and the errors they cause.
- Getting started Fundamentals 10 concepts
- Files & formats Fundamentals 13 concepts
- Data sources & downloads Fundamentals 5 concepts
- Geometry & topology Geometry & space 13 concepts
- CRS & projections Geometry & space 7 concepts
- Joins & relationships Geometry & space 7 concepts
- Networks & routing Geometry & space 3 concepts
- Satellite imagery Imagery & point clouds 5 concepts
- LiDAR & point clouds Imagery & point clouds 4 concepts
- Data cleaning Analysis 10 concepts
- Raster & rasterio Analysis 8 concepts
- Maps & visualisation Analysis 8 concepts
- Spatial statistics Analysis 5 concepts
- Terrain & elevation Analysis 4 concepts
- Movement & time Analysis 4 concepts
- Web maps & tiles Analysis 4 concepts
- Spatial machine learning Modelling & prediction 4 concepts
- Interpolation & surfaces Modelling & prediction 4 concepts
- Batch processing Production 4 concepts
- Pipelines & automation Production 12 concepts
- Performance & scale Production 9 concepts
- Cloud-native formats Production 4 concepts
- Testing, CI & Docker Production 4 concepts
- QGIS & PyQGIS Tools 7 concepts
- PostGIS & databases Tools 4 concepts
Or follow a learning path
Curated routes in the order that builds on itself — concepts first, then each task, then the errors it produces.
-
Finding & Fetching Data
Get the data before you analyse it — from OSM, web services and satellite catalogues.
4 of its 14 steps are concepts → -
Spatial Statistics
Measure the pattern instead of eyeballing the map.
4 of its 13 steps are concepts → -
Terrain & Elevation
Turn a grid of heights into slope, shade, contours and drainage.
3 of its 12 steps are concepts → -
Networks & Routing
Distance along the street, not across the rooftops.
3 of its 11 steps are concepts → -
Raster Analysis
Read, reproject, clip and summarise raster data in Python.
3 of its 14 steps are concepts → -
Spatial SQL & PostGIS
Move the heavy lifting from Python into the database.
4 of its 15 steps are concepts → -
Making Maps
Turn a GeoDataFrame into a map someone else can read.
3 of its 13 steps are concepts → -
GIS Data Cleaning
Turn messy spatial data into analysis-ready datasets.
5 of its 33 steps are concepts → -
Batch Processing
Process many files at once, reliably.
5 of its 26 steps are concepts → -
Automation & Pipelines
Build repeatable, config-driven GIS pipelines.
6 of its 26 steps are concepts → -
QGIS Automation
Automate QGIS with PyQGIS and Processing models.
7 of its 25 steps are concepts → -
Satellite Imagery
From a scene on a catalogue to a number you can defend.
5 of its 16 steps are concepts → -
LiDAR & Point Clouds
Millions of points, and the surfaces worth deriving from them.
4 of its 14 steps are concepts → -
Cloud-Native GIS
Read the part you need, not the file it lives in.
4 of its 14 steps are concepts → -
Publishing Web Maps
Get the data into a browser without shipping the whole dataset.
4 of its 15 steps are concepts → -
Movement & Time
Tracks are not points — the order and the clock are the data.
4 of its 14 steps are concepts → -
Spatial Machine Learning
Why the usual rules break, and what to do instead.
4 of its 14 steps are concepts → -
Interpolation & Surfaces
A continuous surface from scattered samples, with its support attached.
4 of its 13 steps are concepts →
Every concept, A–Z
101 guides in total. Showing 1–30, page 1 of 4.
- Attribute Join or Spatial Join? Choosing How to Combine Two Layers attribute join vs spatial join
- Choosing a Map Projection for Display: What Web Mercator Distorts map projection for display python
- Choosing the Unit of Work in a Batch Job: File, Layer, Feature or Tile batch unit of work gis
- Choropleth Classification Explained: Quantiles, Equal Interval and Natural Breaks choropleth classification schemes
- Chunked Arrays and Zarr Explained zarr chunked arrays explained
- Cloud Masking Explained: QA Bands, Scene Classification and What They Miss cloud masking explained
- Cloud-Native Geospatial Explained: Why the Format Became the API cloud native geospatial explained
- Cloud-Optimised GeoTIFF Explained: Tiles, Overviews and Range Requests cloud optimised geotiff explained
- Configuration vs Code: What Belongs in a Config File configuration vs code
- Coordinate Precision and Floating Point in GIS Explained coordinate precision gis floating point
- Coordinate Reference Systems (CRS) Explained for Python GIS coordinate reference systems python
- Cron, systemd, Airflow or CI? Choosing a Scheduler for GIS Jobs choosing a scheduler for python jobs
- Digital Elevation Models Explained: DEM, DSM and DTM dem dsm dtm explained
- DSM, DTM and CHM from LiDAR: How Each Surface Is Derived lidar surfaces dsm dtm chm explained
- EPSG Codes Explained: How to Choose the Right CRS in Python epsg codes python gis
- Expressions, Scripts, Models or Plugins? QGIS Extension Points Explained qgis plugin vs script vs model
- Extrapolation in Space Explained: The Area of Applicability area of applicability explained
- Failure Policy in Batch Processing: Fail Fast, Skip or Quarantine batch error handling policy
- Fiona vs pyogrio: How GeoPandas Reads and Writes Files fiona vs pyogrio
- Generalisation for Zoom Levels Explained zoom generalisation explained
- GeoPandas Basics: Working with Spatial Data in Python geopandas basics
- GeoParquet and Columnar Storage Explained: Why It Reads So Much Faster geoparquet explained python
- GIS Data Sources Explained: Where Spatial Data Comes From gis data sources
- GIS Vector File Formats Compared: Shapefile, GeoPackage, GeoJSON, Parquet gis vector file formats compared
- GPS Error Explained: Why Your Track Wanders gps error explained
- How PostGIS Stores Geometry: SRID, EWKB and the Typed Column postgis geometry column srid
- How QGIS Styling Works: Renderers, Symbols and Rules qgis renderer symbol explained
- How to Automate QGIS with Python (PyQGIS): The Complete Workflow automate qgis with python
- How to Create Interactive Maps in Python with Folium folium interactive maps python
- How to Make a GIS Workflow Reproducible in Python reproducible gis workflow python