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 19 concepts
- Data sources & downloads Fundamentals 10 concepts
- Geocoding & addresses Fundamentals 6 concepts
- Geometry & topology Geometry & space 20 concepts
- CRS & projections Geometry & space 10 concepts
- Joins & relationships Geometry & space 8 concepts
- Networks & routing Geometry & space 8 concepts
- 3D & buildings Geometry & space 5 concepts
- H3 & global grids Geometry & space 6 concepts
- Satellite imagery Imagery & point clouds 7 concepts
- LiDAR & point clouds Imagery & point clouds 5 concepts
- Gridded & climate data Imagery & point clouds 7 concepts
- Data cleaning Analysis 18 concepts
- Raster & rasterio Analysis 13 concepts
- Maps & visualisation Analysis 15 concepts
- Spatial statistics Analysis 14 concepts
- Census & demographics Analysis 8 concepts
- Terrain & elevation Analysis 9 concepts
- Hydrology & watersheds Analysis 6 concepts
- Movement & time Analysis 4 concepts
- Web maps & tiles Analysis 7 concepts
- Cartography & map design Analysis 8 concepts
- Coastal & marine Analysis 5 concepts
- Agriculture & vegetation Analysis 6 concepts
- Spatial machine learning Modelling & prediction 4 concepts
- Interpolation & surfaces Modelling & prediction 5 concepts
- Location & accessibility Modelling & prediction 6 concepts
- Batch processing Production 4 concepts
- Pipelines & automation Production 15 concepts
- Performance & scale Production 17 concepts
- Cloud-native formats Production 6 concepts
- Testing, CI & Docker Production 4 concepts
- APIs & tile services Delivery & sharing 6 concepts
- Apps & dashboards Delivery & sharing 6 concepts
- Privacy & sensitive locations Governance & trust 6 concepts
- Metadata, licensing & provenance Governance & trust 6 concepts
- QGIS & PyQGIS Tools 7 concepts
- PostGIS & databases Tools 6 concepts
- DuckDB & analytic SQL Tools 6 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 → -
Geocoding & Addresses
Address text is data too — and it is the messiest data in the file.
6 of its 20 steps are concepts → -
Cartography & Map Design
The map is correct. Now make it readable.
6 of its 20 steps are concepts → -
DuckDB for Spatial Data
A spatial database with no server, reading the file you already have.
6 of its 20 steps are concepts → -
Serving Spatial Data
The dataset is finished. Now other people need it over HTTP.
6 of its 20 steps are concepts → -
Maps, Apps & Dashboards
Let the reader ask their own question — within a budget.
6 of its 20 steps are concepts → -
Gridded & Climate Data
A raster with a time axis, a calendar and forty years in one file.
5 of its 20 steps are concepts → -
H3 & Global Grids
Give every point a cell id and half the geometry work becomes a join.
6 of its 20 steps are concepts → -
Census & Demographics
The most-used open data there is, and the easiest to map wrongly.
6 of its 20 steps are concepts → -
Location & Accessibility
Who can reach what — and where the next site should go.
6 of its 20 steps are concepts → -
Hydrology & Watersheds
A DEM already knows where the water goes. Ask it carefully.
6 of its 20 steps are concepts → -
Geoprivacy & Anonymisation
A coordinate is an identifier. Release it as if it were one.
6 of its 20 steps are concepts → -
Metadata, Licensing & Provenance
A layer nobody can describe, cite or re-run is a layer nobody should use.
6 of its 20 steps are concepts → -
3D & Buildings
A footprint plus a height is not a building, but it is most of one.
5 of its 20 steps are concepts → -
Coastal & Marine
The shoreline is a choice of datum, not a line on a map.
5 of its 20 steps are concepts → -
Agriculture & Crops
One field, one season, and a dozen ways to measure it wrong.
6 of its 20 steps are concepts →
Every concept, A–Z
188 guides in total. Showing 1–30, page 1 of 7.
- 0–360 or −180–180: Longitude Conventions in Gridded Data Explained longitude 0 360 convert
- 3D spatial data models explained: 2.5D, meshes and solids 3d spatial data models
- 3D Tiles and the web delivery of 3D city models explained 3d tiles explained
- Accessibility Measures Explained: Nearest, Cumulative and Gravity spatial accessibility measures
- Accessible Maps Explained: Contrast, Text and Alternatives accessible maps
- Address Matching Explained: Why Exact String Equality Fails address matching explained
- Aggregation and suppression rules explained small count suppression
- Attribute Join or Spatial Join? Choosing How to Combine Two Layers attribute join vs spatial join
- Attribution requirements explained: OpenStreetMap, Copernicus and national data openstreetmap attribution requirement
- Authentication and Rate Limits for a Spatial API spatial api authentication
- Bathymetry explained: depths, datums and grids bathymetry explained
- Boundary Changes Over Time: Why Two Census Years Do Not Line Up census boundary changes over time
- Catchment Areas Explained: Buffers, Isochrones and Voronoi Compared catchment area gis
- Census Geographies Explained: Blocks, Tracts, Output Areas and Why They Nest census geography hierarchy explained
- Census Identifiers Explained: GEOIDs, Codes and the Leading Zero Problem census geoid explained
- CF Conventions Explained: How a NetCDF File Says What Its Numbers Mean cf conventions netcdf
- Choosing a Geocoder: Coverage, Licence and Cost Compared choosing a geocoder
- Choosing a Map Projection for Display: What Web Mercator Distorts map projection for display python
- Choosing an H3 Resolution: Cell Size, Counts and What Each Level Can Show h3 resolution cell size
- 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
- CityJSON and CityGML explained cityjson citygml 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
- Colour on Maps Explained: Sequential, Diverging and Qualitative map colour schemes
- Columnar or Row Storage: Why DuckDB Is Fast on Wide Tables columnar row spatial storage
- 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