Geometry & space
The shapes themselves, where they sit on the earth, and how they relate.
Topics in Geometry & space
6 topics, 229 guides. Each topic page groups the concepts, the how-to guides and the fixes for that subject.
-
Geometry & topology
Clipping, buffering, dissolving and overlays — and what makes a geometry valid.
20 concepts · 38 how-to · 14 fixes → -
CRS & projections
Coordinate systems, EPSG codes, reprojection, and the silent errors they cause.
10 concepts · 12 how-to · 22 fixes → -
Joins & relationships
Spatial joins, attribute joins, nearest neighbour and point-in-polygon.
8 concepts · 32 how-to · 8 fixes → -
Networks & routing
Street networks as graphs: shortest paths, travel time, isochrones and snapping.
8 concepts · 12 how-to · 5 fixes → -
3D & buildings
Footprints with a height on them: extrusion, city models, volumes, shadows and the meshes you export.
5 concepts · 10 how-to · 5 fixes → -
H3 & global grids
Indexing the earth into cells: H3 hexagons, S2, geohash and quadkeys — resolution, hierarchy and the joins they make cheap.
6 concepts · 9 how-to · 5 fixes →
Every guide in Geometry & space
Grouped by topic. A guide that spans two topics appears under both.
Geometry & topology 72 guides
- How to Filter Spatial Data in Python Using GeoPandas filter geopandas data
- How to Clip Spatial Data in Python with GeoPandas clip shapefile python geopandas
- How to Dissolve Polygons in Python (GeoPandas) dissolve polygons geopandas
- How to Calculate Area and Distance in GeoPandas (Correctly) calculate area geopandas
- How to Create Buffers in GeoPandas for Spatial Analysis buffer analysis geopandas
- Overlay Operations in GeoPandas: Union, Intersection, Difference Explained geopandas overlay operations
- Shapely Basics: Working with Geometry Objects in Python shapely python geometry
- How to Get Polygon Centroids in GeoPandas polygon centroid geopandas
- How to Count Points in Polygons with GeoPandas count points in polygon geopandas
- How to Simplify Geometry in Python with GeoPandas and Shapely simplify geometry geopandas
- How to Create a Fishnet Grid in Python with GeoPandas fishnet grid python geopandas
- How to Convert a Raster to a Vector in Python raster to vector python
- How to Convert Points to Lines in GeoPandas points to line geopandas
- How to Aggregate Spatial Data by Region in GeoPandas aggregate spatial data geopandas
- How to Remove Null and Empty Geometries in GeoPandas remove null geometries geopandas
- How to Fix Invalid Geometries in Python (GeoPandas) invalid geometries geopandas
- Shapely TopologyException: Found Non-Noded Intersection (How to Fix) shapely topologyexception
- GeoPandas "No Geometry Column" Error: How to Fix It geopandas no geometry column
- How to Find and Remove Duplicate Geometries in GeoPandas remove duplicate geometries geopandas
- How to Snap and Align Geometries to Fix Slivers and Gaps in Python snap geometries fix slivers python
- How to Batch Clip Many Layers to a Single Boundary in Python batch clip shapefiles boundary python geopandas
- buffer(0) Does Not Fix My Invalid Geometry: What to Do Instead buffer 0 not fixing geometry
- Mixed Geometry Types Error When Saving a GeoDataFrame: How to Fix It mixed geometry types geopandas
- How to Split Multipart Geometries into Single Parts in GeoPandas explode multipart geometries geopandas
- What Makes a Geometry Valid? The OGC Rules Explained valid geometry rules gis
- WKT, WKB and GeoJSON: How Geometry Is Actually Stored wkt wkb geojson difference
- Topology in GIS Explained: Slivers, Gaps and Shared Boundaries gis topology explained
- Coordinate Precision and Floating Point in GIS Explained coordinate precision gis floating point
- Spatial Predicates Explained: Intersects, Within, Contains and the Rest spatial predicates geopandas
- Null, Empty, Missing and Invalid: Four Kinds of Broken Geometry empty geometry geopandas
- Topological Coverage: What "Clean" Means for Adjacent Polygons polygon coverage gaps overlaps
- How to Find and Fix Gaps and Overlaps in a Polygon Coverage fix gaps overlaps polygons python
- How to Clean a Line Network: Dangles, Overshoots and Disconnects clean road network topology python
- My Cleaned Layer Has More Rows Than the Original: How to Fix It geopandas more rows after cleaning
- How to Clip a Raster to a Polygon in Python clip raster to polygon python
- How to Rasterize a Vector Layer in Python rasterize vector python
- How to Add Legends, Labels and a Scale Bar to a GeoPandas Map geopandas map legend labels
- How to Plot Multiple Layers on One Map in GeoPandas plot multiple layers geopandas
- How to Assert on Geometry in pytest Without Flaky Comparisons pytest assert geometry equal
- Why GeoPandas Is Slow: The Four Real Bottlenecks why is geopandas slow
- How to Replace a Row Loop with Vectorised GeoPandas Operations vectorise geopandas loop
- GeoPandas .apply() Takes Hours: How to Fix It geopandas apply slow
- Projected vs Geographic CRS: What Actually Changes When You Reproject projected vs geographic crs
- How to Choose the Right Projected CRS for Your Study Area choose projected crs python
- How to Measure Distance Accurately in Python: Geodesic vs Projected measure distance accurately python
- Contours Come Out Jagged or Full of Tiny Rings contours jagged noisy
- Street Networks as Graphs Explained street network graph explained
- How to Calculate the Shortest Path Along a Street Network shortest path street network python
- NetworkX Says No Path Exists Between Two Nodes networkx no path exists
- Generalisation for Zoom Levels Explained zoom generalisation explained
- Map Scale Explained: How Much Detail a Scale Can Hold map scale detail
- How to Clip a NetCDF Grid to a Polygon in Python clip netcdf shapefile python
- How to Fill a Polygon with H3 Cells h3 polygon to cells python
- How to Turn H3 Cells into a GeoDataFrame of Polygons h3 cells to polygons geopandas
- H3 Hierarchy Explained: Parents, Children and Why They Do Not Nest Exactly h3 parent child hierarchy
- Fixing H3 Polygon Fill That Misses Cells or Returns Nothing h3 polygon_to_cells empty
- How to Calculate Population-Weighted Centroids population weighted centroid python
- Catchment Areas Explained: Buffers, Isochrones and Voronoi Compared catchment area gis
- How to Build Voronoi Service Areas Around Facilities in Python voronoi polygons python geopandas
- Fixing Voronoi Polygons That Extend Forever or Miss the Study Area voronoi polygons infinite python
- How to Extract a Stream Network from a DEM extract streams from dem python
- Geomasking methods explained: donut, random and adaptive geomasking methods
- How to apply donut geomasking to sensitive points in Python donut geomasking python
- Geomasked points land in the sea or outside the study area geomasked points in water
- 3D spatial data models explained: 2.5D, meshes and solids 3d spatial data models
- How to extrude building footprints into 3D in Python extrude building footprints python
- How to calculate building volumes and floor area in Python building volume python
- A building mesh is not watertight and its volume is wrong mesh not watertight volume
- The coastline paradox explained for GIS work coastline paradox gis
- Maritime boundaries explained: EEZ, territorial sea and baselines eez territorial sea explained
- How to clip a dataset to an exclusive economic zone clip to eez python
- Delineated field boundaries merge fields or swallow roads field delineation merges fields
CRS & projections 44 guides
- How to Calculate Area and Distance in GeoPandas (Correctly) calculate area geopandas
- EPSG Codes Explained: How to Choose the Right CRS in Python epsg codes python gis
- Spatial Join Returns Empty Results in GeoPandas: How to Fix It spatial join empty geopandas
- CRS Not Found Error in GeoPandas: Causes and Fixes crs not found geopandas
- Why Does My GeoPandas Map Look Upside Down? geopandas map upside down
- Coordinate Reference Systems (CRS) Explained for Python GIS coordinate reference systems python
- How to Reproject Spatial Data in Python (GeoPandas) reproject spatial data geopandas
- How to Fix CRS Mismatch in GeoPandas crs mismatch geopandas
- GeoPandas "Geometry Is in a Geographic CRS" Warning: How to Fix It geopandas geographic crs warning
- Cannot Transform Naive Geometries to CRS: How to Fix It in GeoPandas cannot transform naive geometries
- How to Standardise and Repair CRS Across a Folder of Files in Python standardise crs across files python
- My Points Plot in the Ocean: Fixing Swapped Latitude and Longitude points plotting in the ocean geopandas
- Coordinate Precision and Floating Point in GIS Explained coordinate precision gis floating point
- PostGIS Write Fails on SRID or Geometry Type: How to Fix It postgis srid does not match column
- Raster Resampling Explained: Nearest, Bilinear and When Each Is Wrong raster resampling methods
- How to Reproject a Raster in Python with Rasterio reproject raster rasterio
- Raster and Vector Do Not Line Up in Python: How to Fix It raster vector not aligned python
- Choosing a Map Projection for Display: What Web Mercator Distorts map projection for display python
- How to Add a Basemap to a GeoPandas Map with contextily geopandas basemap contextily
- My Folium Map Is Blank or Will Not Display: How to Fix It folium map not showing
- Projected vs Geographic CRS: What Actually Changes When You Reproject projected vs geographic crs
- How to Choose the Right Projected CRS for Your Study Area choose projected crs python
- How to Set, Assign and Convert CRS in GeoPandas (set_crs vs to_crs) set_crs vs to_crs geopandas
- How to Measure Distance Accurately in Python: Geodesic vs Projected measure distance accurately python
- How to Work with a Custom or Local CRS in Python custom crs proj string python
- How to Reproject Between Datums Correctly (and Why the Grid File Matters) datum transformation python pyproj
- Vertical Datums Explained: Why Your Elevations Are Off vertical datum explained
- Slope Values Are Wrong or Absurdly Steep slope values wrong
- Street Network Routing Returns Absurd Distances routing wrong distance
- laspy Returns the Wrong Coordinates: Scale, Offset and CRS laspy wrong coordinates
- My Tiles Are Offset or in the Wrong Place tiles are offset or misplaced
- CRS in DuckDB: Why ST_Transform Moves Your Data to the Wrong Place duckdb crs projection
- Fixing Coordinates in the Wrong Order in an API Response api coordinates wrong order
- 0–360 or −180–180: Longitude Conventions in Gridded Data Explained longitude 0 360 convert
- How to Take an Area-Weighted Mean over a Latitude–Longitude Grid area weighted mean xarray latitude
- Fixing a NetCDF Map That Is Shifted, Flipped or Split at 180° netcdf map flipped shifted
- Fixing H3 Cells in the Wrong Place: Latitude and Longitude Order h3 lat lng order wrong
- Fixing H3 Hexagons That Stretch Across the Map at the Antimeridian h3 antimeridian polygon
- Fixing Catchment Areas That Are Wrong on a Latitude–Longitude DEM watershed area geographic crs wrong
- How to reduce coordinate precision safely in Python reduce coordinate precision python
- Metadata extents and dates do not match the data metadata extent does not match
- CityJSON coordinates come out tiny or at the origin cityjson coordinates wrong
- Tidal datums explained: which shoreline is the shoreline tidal datum mllw mhhw
- A coastline or EEZ breaks at the antimeridian antimeridian polygon problem
Joins & relationships 48 guides
- How to Filter Spatial Data in Python Using GeoPandas filter geopandas data
- How to Join Attribute Data to a GeoDataFrame in Python join attribute data geopandas
- How to Count Points in Polygons with GeoPandas count points in polygon geopandas
- How to Find the Nearest Point in GeoPandas nearest point geopandas
- How to Aggregate Spatial Data by Region in GeoPandas aggregate spatial data geopandas
- How to Select Features by Location in GeoPandas select by location geopandas
- Spatial Join Returns Empty Results in GeoPandas: How to Fix It spatial join empty geopandas
- How to Perform a Spatial Join in Python (GeoPandas) spatial join geopandas
- GeoPandas Merge Returns NaN or No Matches: How to Fix It geopandas merge no matches
- GeoPandas "Columns Overlap but No Suffix Specified" Error: How to Fix It columns overlap but no suffix specified
- GeoPandas Spatial Join Returns Duplicate Rows: How to Fix It geopandas spatial join duplicates
- How to Fuzzy-Match Place Names When Joining Spatial Data in Python fuzzy match place names python
- Spatial Indexes Explained: R-trees and Why Spatial Joins Are Fast spatial index r-tree explained
- How to Run Spatial SQL Queries from Python with PostGIS spatial sql query python postgis
- Spatial Predicates Explained: Intersects, Within, Contains and the Rest spatial predicates geopandas
- How to Merge Near-Duplicate Features in a Spatial Dataset merge near duplicate features python
- How to Enrich Many Files Against One Reference Layer batch spatial join reference layer
- How to Calculate Zonal Statistics in Python zonal statistics python
- How to Do a Spatial Join in PostGIS with SQL postgis spatial join sql
- How to Use the Spatial Index Directly in GeoPandas (sindex) geopandas sindex spatial index
- Spatial Join Cardinality Explained: One-to-One, One-to-Many and What to Do spatial join one to many
- Nearest-Neighbour Joins Explained: Distance, Ties and Search Radius nearest neighbour join explained
- Attribute Join or Spatial Join? Choosing How to Combine Two Layers attribute join vs spatial join
- How to Bin Points into Hexagons in Python hexbin points python
- Spatial Clustering Explained: DBSCAN, K-Means and What They Assume spatial clustering explained
- How to Cluster Points by Location with DBSCAN in Python dbscan spatial clustering python
- DBSCAN Returns One Giant Cluster or Labels Everything Noise dbscan one cluster
- How to Calculate Moran's I in Python morans i python
- Spatial Weights Warn About Islands or Moran's I Returns nan spatial weights islands warning
- Network Distance vs Straight-Line Distance Explained network distance vs straight line
- How to Snap Points to a Street Network in Python snap points to network python
- How to Aggregate Movement into Flows Between Zones aggregate movement flows python
- How to Interpolate to Polygons Instead of a Grid areal interpolation python
- How to Reverse Geocode Points to Addresses and Areas in Python reverse geocode python
- How to Run a Spatial Join in DuckDB duckdb spatial join
- How to Extract a Time Series per Polygon from a NetCDF Grid netcdf zonal statistics polygons time series
- How to Assign Points to H3 Cells in Python h3 python points to cells
- How to Join Two Point Datasets on an H3 Index Instead of a Spatial Join join on h3 index
- Census Identifiers Explained: GEOIDs, Codes and the Leading Zero Problem census geoid explained
- How to Join a Census Table to Its Boundaries Without Losing Rows join census data to shapefile python
- How to Aggregate Survey Estimates and Their Margins of Error aggregate acs margin of error python
- How to Compare Census Years Across Changed Boundaries census crosswalk python
- Fixing Census Joins That Fail Because Leading Zeros Were Dropped census geoid leading zeros join fails
- Fixing Census Data That Does Not Match the Boundary File Year census data boundaries mismatch year
- How to Count the Population Within Reach of Each Facility population within distance of facility python
- How to Measure Distance to the Nearest Facility for Every Home distance to nearest facility python
- How to Summarise Catchment Attributes: Area, Slope and Land Cover catchment characteristics python
- How to aggregate points to units that meet a minimum count aggregate points minimum count
Networks & routing 25 guides
- OSMnx Download Fails, Hangs or Times Out osmnx timeout error
- Street Networks as Graphs Explained street network graph explained
- How to Build a Street Network Graph in Python with OSMnx street network graph python
- Your Street Network Graph Is Disconnected or Missing Streets osmnx graph disconnected
- Network Distance vs Straight-Line Distance Explained network distance vs straight line
- How to Snap Points to a Street Network in Python snap points to network python
- How to Calculate the Shortest Path Along a Street Network shortest path street network python
- NetworkX Says No Path Exists Between Two Nodes networkx no path exists
- Street Network Routing Returns Absurd Distances routing wrong distance
- How to Measure Network Distance for Many Origin-Destination Pairs network distance matrix python
- Isochrones Explained: Travel Time Areas and What They Assume isochrones explained
- How to Generate Isochrones in Python generate isochrones python
- How to Map-Match a GPS Track to a Street Network map match gps track python
- Location Analysis Explained: Catchments, Accessibility and Site Selection location analysis gis explained
- Catchment Areas Explained: Buffers, Isochrones and Voronoi Compared catchment area gis
- Accessibility Measures Explained: Nearest, Cumulative and Gravity spatial accessibility measures
- How to Measure Distance to the Nearest Facility for Every Home distance to nearest facility python
- How to Measure Access to Services with the Two-Step Floating Catchment Method 2sfca python
- Location-Allocation Explained: p-Median, Coverage and What Each Optimises location allocation p-median explained
- How to Choose Facility Locations with a p-Median Model in Python p-median python pulp
- How to Maximise Coverage with a Limited Number of Sites maximal covering location problem python
- How to Find the Areas Nobody Can Reach Within a Travel Time service area coverage gaps python
- Fixing Accessibility Scores That Are Wrong Near the Study Area Edge accessibility edge effect
- Stream Order Explained: Strahler, Shreve and What They Measure strahler stream order explained
- How to Calculate Strahler Stream Order in Python strahler order python
3D & buildings 20 guides
- 3D spatial data models explained: 2.5D, meshes and solids 3d spatial data models
- Level of detail explained for 3D city models lod 3d city model
- CityJSON and CityGML explained cityjson citygml explained
- Where building heights come from, and how wrong they are building height data source
- 3D Tiles and the web delivery of 3D city models explained 3d tiles explained
- How to extrude building footprints into 3D in Python extrude building footprints python
- How to read a CityJSON city model in Python read cityjson python
- How to calculate building volumes and floor area in Python building volume python
- How to classify roof shapes from LiDAR in Python roof shape classification lidar
- How to compute building shadows for a given time in Python building shadow analysis python
- How to estimate rooftop solar potential in Python rooftop solar potential python
- How to compute sky view factor from a surface model sky view factor python
- How to export a 3D city model to glTF in Python export gltf python gis
- How to test whether a window can see a landmark 3d line of sight python
- How to publish a 3D building layer to a web map 3d buildings web map maplibre
- Extruded buildings float above or sink into the ground extruded buildings float terrain
- CityJSON coordinates come out tiny or at the origin cityjson coordinates wrong
- A building mesh is not watertight and its volume is wrong mesh not watertight volume
- Shadows point the wrong way or have the wrong length shadow wrong direction python
- A 3D viewer shows nothing or a black screen 3d viewer shows nothing
H3 & global grids 20 guides
- Discrete Global Grids Explained: H3, S2, Geohash and Why Cells Beat Coordinates discrete global grid system explained
- H3 Explained: How a Hexagonal Grid Indexes the Whole Earth h3 hexagon index explained
- How to Assign Points to H3 Cells in Python h3 python points to cells
- Choosing an H3 Resolution: Cell Size, Counts and What Each Level Can Show h3 resolution cell size
- How to Aggregate Points into H3 Hexagons and Map Them aggregate points h3 hexagons
- How to Fill a Polygon with H3 Cells h3 polygon to cells python
- How to Turn H3 Cells into a GeoDataFrame of Polygons h3 cells to polygons geopandas
- H3 Hierarchy Explained: Parents, Children and Why They Do Not Nest Exactly h3 parent child hierarchy
- How to Use H3 Neighbours for k-Ring Smoothing and Buffers h3 grid_disk k ring python
- How to Join Two Point Datasets on an H3 Index Instead of a Spatial Join join on h3 index
- How to Use H3 in DuckDB for Grid Aggregation at Scale duckdb h3 extension
- Geohash Explained: Prefixes, Precision and the Edge Problem geohash explained precision
- S2 Cells Explained: Squares on a Cube and When They Beat Hexagons s2 geometry cells explained
- How to Index Data by Quadkey and Web Map Tile quadkey python tile index
- How to Compact an H3 Cell Set to Store a Region Cheaply h3 compact cells
- Fixing H3 Cells in the Wrong Place: Latitude and Longitude Order h3 lat lng order wrong
- Fixing H3 Hexagons That Stretch Across the Map at the Antimeridian h3 antimeridian polygon
- Fixing H3 Polygon Fill That Misses Cells or Returns Nothing h3 polygon_to_cells empty
- Fixing H3 AttributeError After Upgrading: the v3 to v4 API Rename h3 has no attribute geo_to_h3
- Fixing an H3 Map That Misleads: Unequal Cell Areas and Empty Cells h3 cell area distortion