Analysis
Getting from a raw download to something you can put in front of someone.
Topics in Analysis
12 topics, 437 guides. Each topic page groups the concepts, the how-to guides and the fixes for that subject.
-
Data cleaning
Turning a messy download into an analysis-ready dataset you can trust.
18 concepts · 32 how-to · 20 fixes → -
Raster & rasterio
Reading, sampling and converting raster data in Python.
13 concepts · 45 how-to · 11 fixes → -
Maps & visualisation
Static plots, choropleths, interactive maps, and exporting images people can use.
15 concepts · 34 how-to · 15 fixes → -
Spatial statistics
Density, clustering, hotspots and autocorrelation — measuring pattern rather than drawing it.
14 concepts · 18 how-to · 8 fixes → -
Census & demographics
Census boundaries and tables: joining them, turning counts into rates, carrying margins of error, and comparing years.
8 concepts · 14 how-to · 6 fixes → -
Terrain & elevation
Working with DEMs: slope, aspect, hillshade, contours, profiles and drainage.
9 concepts · 22 how-to · 11 fixes → -
Hydrology & watersheds
Where water goes on a DEM: conditioning, flow direction and accumulation, watersheds, stream networks and HAND.
6 concepts · 9 how-to · 5 fixes → -
Movement & time
GPS tracks and trajectories: cleaning them, segmenting them, and measuring what moved where.
4 concepts · 11 how-to · 3 fixes → -
Web maps & tiles
Getting a dataset into a browser: tile pyramids, vector tiles, PMTiles and MapLibre styling.
7 concepts · 10 how-to · 7 fixes → -
Cartography & map design
The decisions that turn a correct plot into a map someone can read: hierarchy, colour, labels and export.
8 concepts · 9 how-to · 5 fixes → -
Coastal & marine
Depths, tides and shorelines: bathymetry grids, which line is the coast, inundation, vessel tracks and the sea areas a country can claim.
5 concepts · 10 how-to · 5 fixes → -
Agriculture & vegetation
Fields, crops and canopies: boundaries, vegetation indices over a season, yield maps, management zones and prescription files.
6 concepts · 9 how-to · 5 fixes →
Every guide in Analysis
Grouped by topic. A guide that spans two topics appears under both.
Data cleaning 70 guides
- How to Remove Null and Empty Geometries in GeoPandas remove null geometries geopandas
- How to Fix Invalid Geometries in Python (GeoPandas) invalid geometries geopandas
- Why Are My Shapefile Column Names Truncated? How to Fix It shapefile column names truncated
- The Python GIS Data Cleaning Checklist: From Raw Download to Analysis-Ready gis data cleaning python
- How to Find and Remove Duplicate Geometries in GeoPandas remove duplicate geometries geopandas
- How to Clean Messy CSV Coordinates into a Reliable GeoDataFrame clean csv coordinates
- How to Standardise and Repair CRS Across a Folder of Files in Python standardise crs across files python
- How to Clean and Normalise Attribute Columns in a GeoDataFrame clean attribute columns geodataframe
- How to Handle Missing and Null Values in Spatial Datasets in Python handle missing values spatial data python
- How to Snap and Align Geometries to Fix Slivers and Gaps in Python snap geometries fix slivers python
- How to Validate a GeoDataFrame Against a Schema Before Analysis validate geodataframe schema python
- How to Build a Repeatable Data-Cleaning Report in GeoPandas data cleaning report geopandas
- buffer(0) Does Not Fix My Invalid Geometry: What to Do Instead buffer 0 not fixing geometry
- Garbled Attribute Text and UnicodeDecodeError from a Shapefile: How to Fix Encoding shapefile encoding error python
- GeoPandas to_file() Fails on a Column Type: How to Fix It geopandas to_file field type error
- How to Split Multipart Geometries into Single Parts in GeoPandas explode multipart geometries geopandas
- How to Fuzzy-Match Place Names When Joining Spatial Data in Python fuzzy match place names python
- How to Find and Remove Spatial Outliers in a Point Dataset remove spatial outliers python
- How to Clean and Standardise Date Columns in Spatial Data clean date columns spatial data python
- Spatial Data Quality: The Six Dimensions That Matter spatial data quality dimensions
- Null, Empty, Missing and Invalid: Four Kinds of Broken Geometry empty geometry geopandas
- How to Explore a Spatial Dataset You Have Never Seen Before explore spatial dataset python
- Rasterio Returns the Wrong Values: NoData, Scaling and dtype Fixes rasterio nodata wrong values
- Topological Coverage: What "Clean" Means for Adjacent Polygons polygon coverage gaps overlaps
- Repair, Reject or Flag? Choosing What Cleaning Should Do gis data cleaning decisions
- How to Find and Fix Gaps and Overlaps in a Polygon Coverage fix gaps overlaps polygons python
- How to Merge Near-Duplicate Features in a Spatial Dataset merge near duplicate features python
- How to Clean a Line Network: Dangles, Overshoots and Disconnects clean road network topology python
- How to Standardise Attribute Values Against a Controlled Vocabulary standardise attribute values python
- My Cleaned Layer Has More Rows Than the Original: How to Fix It geopandas more rows after cleaning
- Choropleth Classification Explained: Quantiles, Equal Interval and Natural Breaks choropleth classification schemes
- My GeoPandas Choropleth Colours Look Wrong: How to Fix It geopandas choropleth colours wrong
- Test Fixtures for GIS Code: Building Spatial Test Data You Can Trust gis test fixtures python
- How to Set, Assign and Convert CRS in GeoPandas (set_crs vs to_crs) set_crs vs to_crs geopandas
- How to Reproject Between Datums Correctly (and Why the Grid File Matters) datum transformation python pyproj
- Spatial Join Cardinality Explained: One-to-One, One-to-Many and What to Do spatial join one to many
- Attribute Join or Spatial Join? Choosing How to Combine Two Layers attribute join vs spatial join
- How to Geocode Addresses in Python geocode addresses python
- Geocoding Returns Wrong or Missing Coordinates geocoding wrong coordinates
- The Modifiable Areal Unit Problem Explained modifiable areal unit problem
- Spatial Autocorrelation Explained spatial autocorrelation explained
- My Time Column Sorts or Joins Wrongly spatial time column timezone errors
- How to Clean a GPS Track: Outliers, Duplicates and Jumps clean gps track python
- My Track Has Impossible Speeds or Teleports track impossible speeds
- How to Resample and Interpolate a Track to a Fixed Interval resample gps track python
- The Address Data Model: Why an Address Is Not a String address data model
- How to Parse and Normalise Addresses in Python parse addresses python
- Rooftop, Interpolated or Centroid: Geocoding Precision Levels geocoding precision levels
- How to Validate Geocoding Results Before You Trust Them validate geocoding results
- Address Matching Explained: Why Exact String Equality Fails address matching explained
- How to Match Addresses Against a Reference File in Python match addresses reference file
- How to Deduplicate an Address List in Python deduplicate addresses python
- Fixing Geocodes That All Land in the Country Centroid geocodes country centroid
- Fixing a Geocoder That Matches the Wrong Town geocoder wrong town
- Fixing NetCDF Values That Look Wrong: scale_factor, _FillValue and Units netcdf scale_factor fill value wrong
- Fixing cftime and Out-of-Bounds Datetime Errors in xarray cftime datetime error xarray
- 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 Normalise Census Counts into Rates and Densities normalize census data per capita python
- Boundary Changes Over Time: Why Two Census Years Do Not Line Up census boundary changes over time
- Fixing Census API Values Like −666666666 and Other Sentinels census api -666666666
- Fixing Census Totals That Do Not Add Up After Aggregation census totals don't match
- Geoprivacy explained: why coordinates are personal data geospatial privacy
- Anonymised points still identify individuals anonymised points still identify
- Spatial metadata explained: what a dataset must tell you spatial metadata
- How to measure shoreline change between two dates shoreline change analysis python
- Tide times are off by hours after a join tide times wrong timezone
- Yield monitor data explained: what the numbers really are yield monitor data
- How to clean yield monitor data in Python clean yield monitor data python
- A yield map has impossible values and stripes yield map stripes impossible values
Raster & rasterio 69 guides
- Vector vs Raster Data in Python GIS: Key Differences vector raster data python gis
- Introduction to Rasterio: Reading Raster Data in Python rasterio python tutorial
- How to Extract Raster Values at Point Locations with Rasterio extract raster values rasterio
- How to Convert a Raster to a Vector in Python raster to vector python
- RasterioIOError: Not Recognized as a Supported File Format (How to Fix) rasterioioerror supported file format
- How to Batch Process Rasters with Rasterio in Python batch process rasters rasterio python
- Rasterio Returns the Wrong Values: NoData, Scaling and dtype Fixes rasterio nodata wrong values
- The Raster Data Model Explained: Bands, dtype, NoData and the Transform raster data model python
- 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
- How to Clip a Raster to a Polygon in Python clip raster to polygon python
- How to Calculate Zonal Statistics in Python zonal statistics python
- How to Rasterize a Vector Layer in Python rasterize vector python
- How to Merge and Mosaic Rasters in Python with Rasterio merge rasters rasterio mosaic
- Raster and Vector Do Not Line Up in Python: How to Fix It raster vector not aligned python
- Rasterio Output GeoTIFF Is Black or Empty: How to Fix It rasterio output black empty
- STAC Explained: How Satellite Imagery Catalogues Work stac explained
- How to Search and Download Satellite Imagery with STAC in Python download satellite imagery python
- Digital Elevation Models Explained: DEM, DSM and DTM dem dsm dtm explained
- Slope and Aspect Explained: How They Are Computed from a Grid slope aspect explained
- How to Calculate Slope and Aspect from a DEM in Python calculate slope python dem
- How to Generate Contour Lines from a DEM in Python generate contours python
- How to Extract an Elevation Profile Along a Line in Python elevation profile python
- How to Fill Sinks and Derive Flow Direction from a DEM fill sinks flow direction python
- How to Calculate a Viewshed in Python viewshed python
- How to Load Sentinel-2 Bands into Python as an Analysis-Ready Array load sentinel2 bands python
- Satellite Bands Have Different Shapes or Do Not Align satellite bands do not align
- How to Resample Satellite Bands to a Common Grid resample satellite bands python
- How to Calculate NDVI from Sentinel-2 in Python calculate ndvi python
- NDVI Values Are Above 1 or Below −1: How to Fix It ndvi values out of range
- How to Mask Clouds in Sentinel-2 Imagery with Python mask clouds sentinel2 python
- How to Build a Cloud-Free Composite from Many Satellite Scenes cloud free composite python
- My Composite Has Holes, Stripes or Grey Patches composite has holes or stripes
- How to Extract a Vegetation Index Time Series for a Polygon ndvi time series polygon python
- How to Detect Change Between Two Satellite Images in Python detect change satellite images python
- How to Rasterise a Point Cloud to a Grid in Python rasterise point cloud python
- Cloud-Optimised GeoTIFF Explained: Tiles, Overviews and Range Requests cloud optimised geotiff explained
- How to Read a COG from a URL Without Downloading the Whole File read cog from url python
- How to Write a Cloud-Optimised GeoTIFF in Python write cloud optimised geotiff python
- How to Sample Training Points from Rasters and Polygons sample training points python
- How to Predict a Continuous Surface with Random Forest random forest spatial prediction python
- How to Turn Model Predictions Back into a Raster predictions to raster python
- My Prediction Raster Is Striped, Blocky or Full of NoData prediction raster artefacts
- How to Interpolate Points to a Grid with IDW in Python idw interpolation python
- How to Choose a Cell Size for an Interpolated Surface choose cell size interpolation
- How to Select a Time Range and Location from an xarray Dataset xarray select time location
- How to Clip a NetCDF Grid to a Polygon in Python clip netcdf shapefile python
- How to Convert NetCDF to GeoTIFF in Python netcdf to geotiff python
- How to Extract a Time Series per Polygon from a NetCDF Grid netcdf zonal statistics polygons time series
- Regridding Explained: Bilinear, Conservative and Nearest for Gridded Data regridding explained conservative bilinear
- How to Redistribute Population with Dasymetric Mapping dasymetric mapping python
- Site Suitability Explained: Constraints, Factors and Weights site suitability analysis gis
- How to Run a Weighted Site Suitability Analysis in Python suitability analysis python raster
- Fixing a Suitability Map That Comes Out All One Value or All NoData suitability raster overlay nodata
- Flow Direction Explained: D8, D-Infinity and MFD Compared d8 flow direction explained
- How to Condition a DEM for Hydrology: Breaching or Filling breach depressions dem python
- How to Calculate Flow Accumulation from a DEM in Python flow accumulation python
- How to Delineate a Watershed from a Pour Point in Python watershed delineation python
- How DEM Resolution and Source Change a Drainage Network dem resolution stream network
- How to Calculate Height Above Nearest Drainage (HAND) in Python hand python dem
- How to Burn a Known River Network into a DEM stream burning dem python
- Fixing Flow Accumulation That Is All Zeros, NoData or Stops at the Edge flow accumulation nodata
- How to embed provenance tags in a GeoTIFF geotiff metadata tags 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
- Bathymetry explained: depths, datums and grids bathymetry explained
- How to load and plot a bathymetry grid in Python load bathymetry python
- How to extract a coastline from a raster in Python extract coastline raster python
- Bathymetry depths are positive in one file and negative in another bathymetry sign convention
Maps & visualisation 64 guides
- How to Plot Maps in Python with GeoPandas and Matplotlib plot map geopandas matplotlib
- How to Create Interactive Maps in Python with Folium folium interactive maps python
- How to Create a Choropleth Map in Python with GeoPandas choropleth map geopandas
- How to Save a Map as an Image in Python with Matplotlib save map image matplotlib python
- Why Does My GeoPandas Map Look Upside Down? geopandas map upside down
- Why Is My GeoPandas Plot Blank or Empty? How to Fix It geopandas plot blank
- How to Style Layers and Export Map Layouts from PyQGIS qgis export layout python
- My Points Plot in the Ocean: Fixing Swapped Latitude and Longitude points plotting in the ocean geopandas
- How QGIS Styling Works: Renderers, Symbols and Rules qgis renderer symbol explained
- Choosing a Map Projection for Display: What Web Mercator Distorts map projection for display python
- Choropleth Classification Explained: Quantiles, Equal Interval and Natural Breaks choropleth classification schemes
- How to Add a Basemap to a GeoPandas Map with contextily geopandas basemap contextily
- 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 Batch-Generate a Map Image for Every Region in Python batch generate maps python
- My GeoPandas Choropleth Colours Look Wrong: How to Fix It geopandas choropleth colours wrong
- My Folium Map Is Blank or Will Not Display: How to Fix It folium map not showing
- How to Set Up Jupyter for Python GIS Work jupyter python gis setup
- Your First Python GIS Analysis: From Download to Map in One Script first python gis analysis
- Kernel Density Explained: What a Heatmap Actually Shows kernel density explained
- How to Make a Point Density Heatmap in Python point density heatmap python
- Your Heatmap Looks Wrong: KDE Bandwidth and Cell Size kde bandwidth wrong
- How to Find Hotspots with Getis-Ord Gi* in Python getis ord hotspot python
- How to Make a Hillshade from a DEM in Python hillshade python
- Hillshade Looks Flat, Washed Out or Inverted hillshade inverted
- Isochrones Explained: Travel Time Areas and What They Assume isochrones explained
- How to Generate Isochrones in Python generate isochrones python
- Web Map Tiles Explained: XYZ, Zoom Levels and the Tile Pyramid web map tiles explained
- Vector Tiles Explained: MVT, Layers and Why They Are Not GeoJSON vector tiles explained
- How to Prepare a GeoDataFrame for the Web prepare geodataframe for web
- How to Style Data-Driven Colours in a Web Map data driven web map styling
- How to Add Interactivity and Popups to a Web Map web map popups interactivity
- How to Animate Movement Over Time in Python animate movement python
- Visual Hierarchy Explained: What a Map Reader Sees First map visual hierarchy
- Colour on Maps Explained: Sequential, Diverging and Qualitative map colour schemes
- How to Choose and Test a Colour Ramp in Python colour ramp python map
- How to Check a Map for Colour-Blind Readers colour blind map check
- Labelling Explained: Why Automatic Map Labels Collide map labelling explained
- How to Label Map Features Without Overlaps in Matplotlib label map features python
- Which Map Elements Are Actually Required map elements required
- How to Add a Scale Bar and North Arrow to a Python Map scale bar north arrow python
- How to Build a Print-Ready Map Layout in Matplotlib print map layout matplotlib
- How to Export a Map at Print Quality: DPI, Vector and Fonts export map print quality
- How to Add an Inset and Locator Map in Python inset locator map python
- Accessible Maps Explained: Contrast, Text and Alternatives accessible maps
- Fixing Map Labels That Overlap or Get Clipped map labels overlap
- Fixing Map Text That Is Too Small in the Exported File map text too small export
- Fixing Map Colours That Change Between Screen and Print map colours print differ
- Spatial Dashboards Explained: When an App Beats a Map Image spatial dashboard explained
- How to Build a Streamlit App with an Interactive Map streamlit map app python
- How to Add Filters and Widgets That Drive a Map map app filters widgets
- How to Let Users Draw an Area of Interest in a Map App draw area of interest map app
- How to Link a Map and a Chart So One Selection Drives Both link map and chart app
- Fixing a NetCDF Map That Is Shifted, Flipped or Split at 180° netcdf map flipped shifted
- How to Aggregate Points into H3 Hexagons and Map Them aggregate points h3 hexagons
- How to Turn H3 Cells into a GeoDataFrame of Polygons h3 cells to polygons geopandas
- Fixing H3 Hexagons That Stretch Across the Map at the Antimeridian h3 antimeridian polygon
- Fixing an H3 Map That Misleads: Unequal Cell Areas and Empty Cells h3 cell area distortion
- Counts, Rates and Densities: What a Demographic Map Should Show map counts vs rates normalize
- How to Normalise Census Counts into Rates and Densities normalize census data per capita python
- Fixing a Rate Map Dominated by Tiny, Nearly Empty Areas choropleth rate map small population
- How to compute building shadows for a given time in Python building shadow analysis python
- Shadows point the wrong way or have the wrong length shadow wrong direction python
- How to generate depth contours from bathymetry depth contours python
Spatial statistics 40 guides
- The Modifiable Areal Unit Problem Explained modifiable areal unit problem
- Kernel Density Explained: What a Heatmap Actually Shows kernel density explained
- How to Make a Point Density Heatmap in Python point density heatmap python
- Your Heatmap Looks Wrong: KDE Bandwidth and Cell Size kde bandwidth wrong
- 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 Build a Distance Matrix Between Two Layers in Python distance matrix geopandas
- Spatial Autocorrelation Explained spatial autocorrelation explained
- 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
- How to Find Hotspots with Getis-Ord Gi* in Python getis ord hotspot python
- How to Build Spatial Features for a Machine Learning Model build spatial features python
- The Variogram Explained: How Far Does a Measurement Reach variogram explained
- How to Fit a Variogram and Krige a Surface in Python kriging python
- My Kriging Fit Fails or Returns a Flat Surface kriging fit fails flat surface
- How to Calculate a Climatology and Anomalies with xarray climate anomaly xarray
- How to Take an Area-Weighted Mean over a Latitude–Longitude Grid area weighted mean xarray latitude
- 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
- 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 Use H3 Neighbours for k-Ring Smoothing and Buffers h3 grid_disk k ring python
- Fixing an H3 Map That Misleads: Unequal Cell Areas and Empty Cells h3 cell area distortion
- Margins of Error Explained: Why Survey Estimates Need Their Uncertainty acs margin of error explained
- How to Aggregate Survey Estimates and Their Margins of Error aggregate acs margin of error python
- Small Numbers Explained: Why Rates in Small Areas Jump Around small area rate instability
- How to Smooth Unstable Area Rates with Empirical Bayes in Python empirical bayes rate smoothing python
- Fixing a Rate Map Dominated by Tiny, Nearly Empty Areas choropleth rate map small population
- Gravity and Huff Models Explained: Predicting Where People Go huff model explained
- How to Estimate Market Share with a Huff Model in Python huff model python
- Fixing a Gravity Model That Sends Everyone to the Biggest Store huff model distance decay parameter
- Re-identification risk in spatial data explained re-identification spatial data
- Spatial k-anonymity explained spatial k-anonymity
- How to measure re-identification risk in a point dataset measure re-identification risk python
- Geomasking changed the result of the analysis geomasking bias analysis
- Management zones explained management zones precision agriculture
- How to build management zones with clustering in Python management zones clustering python
- How to analyse an on-farm strip trial in Python on farm strip trial analysis
Census & demographics 28 guides
- 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
- How to Download Census Boundaries in Python download census tract shapefile python
- How to Download Census Tables from an API in Python census api python acs
- How to Join a Census Table to Its Boundaries Without Losing Rows join census data to shapefile python
- Counts, Rates and Densities: What a Demographic Map Should Show map counts vs rates normalize
- How to Normalise Census Counts into Rates and Densities normalize census data per capita python
- Margins of Error Explained: Why Survey Estimates Need Their Uncertainty acs margin of error explained
- How to Aggregate Survey Estimates and Their Margins of Error aggregate acs margin of error python
- Small Numbers Explained: Why Rates in Small Areas Jump Around small area rate instability
- How to Smooth Unstable Area Rates with Empirical Bayes in Python empirical bayes rate smoothing python
- Boundary Changes Over Time: Why Two Census Years Do Not Line Up census boundary changes over time
- How to Compare Census Years Across Changed Boundaries census crosswalk python
- How to Redistribute Population with Dasymetric Mapping dasymetric mapping python
- How to Calculate Population-Weighted Centroids population weighted centroid python
- Fixing Census Joins That Fail Because Leading Zeros Were Dropped census geoid leading zeros join fails
- Fixing Census API Values Like −666666666 and Other Sentinels census api -666666666
- Fixing a Rate Map Dominated by Tiny, Nearly Empty Areas choropleth rate map small population
- Fixing Census Totals That Do Not Add Up After Aggregation census totals don't match
- 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 Access to Services with the Two-Step Floating Catchment Method 2sfca python
- How to Find the Areas Nobody Can Reach Within a Travel Time service area coverage gaps python
- Aggregation and suppression rules explained small count suppression
- Differential privacy for spatial counts explained differential privacy spatial
- How to suppress small counts in a spatial table in Python suppress small counts python
- How to add differentially private noise to spatial counts laplace noise counts python
- Suppressed cells can be recovered from the totals complementary suppression disclosure
Terrain & elevation 42 guides
- Digital Elevation Models Explained: DEM, DSM and DTM dem dsm dtm explained
- Vertical Datums Explained: Why Your Elevations Are Off vertical datum explained
- Slope and Aspect Explained: How They Are Computed from a Grid slope aspect explained
- How to Calculate Slope and Aspect from a DEM in Python calculate slope python dem
- Slope Values Are Wrong or Absurdly Steep slope values wrong
- How to Make a Hillshade from a DEM in Python hillshade python
- Hillshade Looks Flat, Washed Out or Inverted hillshade inverted
- How to Generate Contour Lines from a DEM in Python generate contours python
- Contours Come Out Jagged or Full of Tiny Rings contours jagged noisy
- How to Extract an Elevation Profile Along a Line in Python elevation profile python
- How to Fill Sinks and Derive Flow Direction from a DEM fill sinks flow direction python
- How to Calculate a Viewshed in Python viewshed python
- DSM, DTM and CHM from LiDAR: How Each Surface Is Derived lidar surfaces dsm dtm chm explained
- How to Create a DTM from LiDAR Ground Points in Python create dtm from lidar python
- My LiDAR DTM Has Holes, Spikes or Terraces lidar dtm holes and spikes
- How to Create a Canopy Height Model from LiDAR canopy height model python
- How to Measure Building Heights from LiDAR in Python building heights from lidar python
- How to Build a TIN and Interpolate Elevations tin interpolation python
- How to Run a Weighted Site Suitability Analysis in Python suitability analysis python raster
- DEM Hydrology Explained: From Elevation to Where Water Goes dem hydrology explained
- Flow Direction Explained: D8, D-Infinity and MFD Compared d8 flow direction explained
- How to Condition a DEM for Hydrology: Breaching or Filling breach depressions dem python
- How to Calculate Flow Accumulation from a DEM in Python flow accumulation python
- Pour Points Explained: Why Watershed Delineation Needs a Snapped Outlet pour point snapping explained
- How to Delineate a Watershed from a Pour Point in Python watershed delineation python
- How to Extract a Stream Network from a DEM extract streams from dem python
- How to Calculate Strahler Stream Order in Python strahler order python
- How to Split a Catchment into Sub-basins at Many Outlets delineate subbasins python
- How to Summarise Catchment Attributes: Area, Slope and Land Cover catchment characteristics python
- How DEM Resolution and Source Change a Drainage Network dem resolution stream network
- Height Above Nearest Drainage Explained: A Quick Flood Proxy hand height above nearest drainage
- How to Calculate Height Above Nearest Drainage (HAND) in Python hand python dem
- How to Burn a Known River Network into a DEM stream burning dem python
- Fixing a Watershed That Comes Out as a Few Pixels watershed delineation wrong small
- Fixing Streams That Run in Straight Parallel Lines Across Flat Ground flow direction flat areas parallel streams
- Fixing Flow Accumulation That Is All Zeros, NoData or Stops at the Edge flow accumulation nodata
- Fixing Streams That Stop at Roads, Bridges and Embankments dem roads block flow bridges
- Fixing Catchment Areas That Are Wrong on a Latitude–Longitude DEM watershed area geographic crs wrong
- How to test whether a window can see a landmark 3d line of sight python
- Extruded buildings float above or sink into the ground extruded buildings float terrain
- How to map coastal inundation from a DEM in Python coastal inundation mapping python
- An inundation map floods inland areas that cannot flood bathtub inundation wrong
Hydrology & watersheds 20 guides
- DEM Hydrology Explained: From Elevation to Where Water Goes dem hydrology explained
- Flow Direction Explained: D8, D-Infinity and MFD Compared d8 flow direction explained
- How to Condition a DEM for Hydrology: Breaching or Filling breach depressions dem python
- How to Calculate Flow Accumulation from a DEM in Python flow accumulation python
- Pour Points Explained: Why Watershed Delineation Needs a Snapped Outlet pour point snapping explained
- How to Delineate a Watershed from a Pour Point in Python watershed delineation python
- How to Extract a Stream Network from a DEM extract streams from dem python
- Stream Order Explained: Strahler, Shreve and What They Measure strahler stream order explained
- How to Calculate Strahler Stream Order in Python strahler order python
- How to Split a Catchment into Sub-basins at Many Outlets delineate subbasins python
- How to Summarise Catchment Attributes: Area, Slope and Land Cover catchment characteristics python
- How DEM Resolution and Source Change a Drainage Network dem resolution stream network
- Height Above Nearest Drainage Explained: A Quick Flood Proxy hand height above nearest drainage
- How to Calculate Height Above Nearest Drainage (HAND) in Python hand python dem
- How to Burn a Known River Network into a DEM stream burning dem python
- Fixing a Watershed That Comes Out as a Few Pixels watershed delineation wrong small
- Fixing Streams That Run in Straight Parallel Lines Across Flat Ground flow direction flat areas parallel streams
- Fixing Flow Accumulation That Is All Zeros, NoData or Stops at the Edge flow accumulation nodata
- Fixing Streams That Stop at Roads, Bridges and Embankments dem roads block flow bridges
- Fixing Catchment Areas That Are Wrong on a Latitude–Longitude DEM watershed area geographic crs wrong
Movement & time 18 guides
- Trajectories Explained: What Makes a Track Different from Points trajectories explained
- Sampling Rate and Gaps Explained: How Often Is Often Enough gps sampling rate explained
- GPS Error Explained: Why Your Track Wanders gps error explained
- How to Load GPS Tracks into Python as Trajectories load gps tracks python
- My Time Column Sorts or Joins Wrongly spatial time column timezone errors
- How to Clean a GPS Track: Outliers, Duplicates and Jumps clean gps track python
- My Track Has Impossible Speeds or Teleports track impossible speeds
- How to Calculate Speed, Distance and Direction Along a Track speed distance direction track python
- Stops, Trips and Segmentation Explained stops trips segmentation explained
- How to Split a Track into Trips and Stops in Python split track into trips python
- How to Resample and Interpolate a Track to a Fixed Interval resample gps track python
- How to Map-Match a GPS Track to a Street Network map match gps track python
- How to Aggregate Movement into Flows Between Zones aggregate movement flows python
- How to Animate Movement Over Time in Python animate movement python
- How to Resample a Gridded Time Series to Monthly or Annual Values xarray resample monthly
- How to test whether GPS traces reveal where people live gps traces home location privacy
- How to clean AIS vessel tracks in Python clean ais data python
- AIS tracks jump across the world ais track jumps
Web maps & tiles 24 guides
- Web Map Tiles Explained: XYZ, Zoom Levels and the Tile Pyramid web map tiles explained
- Vector Tiles Explained: MVT, Layers and Why They Are Not GeoJSON vector tiles explained
- Generalisation for Zoom Levels Explained zoom generalisation explained
- How to Prepare a GeoDataFrame for the Web prepare geodataframe for web
- My GeoJSON Is Too Big for the Browser geojson too big for browser
- How to Build Vector Tiles from a GeoDataFrame in Python build vector tiles python
- PMTiles and MBTiles Explained: Tile Archives Without a Server pmtiles mbtiles explained
- How to Serve a Web Map from PMTiles with MapLibre serve pmtiles maplibre
- My Web Map Is Blank or the Layer Never Appears web map layer not appearing
- My Tiles Are Offset or in the Wrong Place tiles are offset or misplaced
- How to Render Raster Tiles from a COG in Python raster tiles from cog
- How to Export a Static Tile Pyramid for Offline Use export static tile pyramid python
- How to Style Data-Driven Colours in a Web Map data driven web map styling
- How to Add Interactivity and Popups to a Web Map web map popups interactivity
- How to Publish a GeoJSON API from a GeoDataFrame with FastAPI geojson api fastapi python
- Serving Spatial Data Explained: Files, Features and Tiles serving spatial data api
- Dynamic Tile Server or Static Tiles: What to Serve tile server vs static tiles
- Fixing CORS Errors on a Spatial API spatial api cors error
- Fixing a Tile Endpoint That Returns 404 or Blank Tiles tile endpoint 404 blank
- Fixing Blank or Grey Tiles in an Embedded Map blank grey tiles map app
- How to Index Data by Quadkey and Web Map Tile quadkey python tile index
- 3D Tiles and the web delivery of 3D city models explained 3d tiles explained
- How to publish a 3D building layer to a web map 3d buildings web map maplibre
- A 3D viewer shows nothing or a black screen 3d viewer shows nothing
Cartography & map design 22 guides
- Visual Hierarchy Explained: What a Map Reader Sees First map visual hierarchy
- Colour on Maps Explained: Sequential, Diverging and Qualitative map colour schemes
- How to Choose and Test a Colour Ramp in Python colour ramp python map
- How to Check a Map for Colour-Blind Readers colour blind map check
- Labelling Explained: Why Automatic Map Labels Collide map labelling explained
- How to Label Map Features Without Overlaps in Matplotlib label map features python
- Which Map Elements Are Actually Required map elements required
- How to Add a Scale Bar and North Arrow to a Python Map scale bar north arrow python
- Map Scale Explained: How Much Detail a Scale Can Hold map scale detail
- How to Build a Print-Ready Map Layout in Matplotlib print map layout matplotlib
- How to Export a Map at Print Quality: DPI, Vector and Fonts export map print quality
- How to Add an Inset and Locator Map in Python inset locator map python
- Accessible Maps Explained: Contrast, Text and Alternatives accessible maps
- How to Make a Map Series with Consistent Symbology map series consistent symbology
- How to Build a Reusable Map Style Module reusable map style python
- Fixing Map Labels That Overlap or Get Clipped map labels overlap
- Fixing Map Text That Is Too Small in the Exported File map text too small export
- Fixing Missing or Substituted Fonts in an Exported Map PDF map pdf fonts missing
- Fixing a Map Export That Is Hundreds of Megabytes map export file too large
- Fixing Map Colours That Change Between Screen and Print map colours print differ
- Counts, Rates and Densities: What a Demographic Map Should Show map counts vs rates normalize
- Attribution requirements explained: OpenStreetMap, Copernicus and national data openstreetmap attribution requirement
Coastal & marine 20 guides
- Bathymetry explained: depths, datums and grids bathymetry explained
- Tidal datums explained: which shoreline is the shoreline tidal datum mllw mhhw
- The coastline paradox explained for GIS work coastline paradox gis
- Maritime boundaries explained: EEZ, territorial sea and baselines eez territorial sea explained
- Sea level rise data explained sea level rise data
- How to load and plot a bathymetry grid in Python load bathymetry python
- How to extract a coastline from a raster in Python extract coastline raster python
- How to measure shoreline change between two dates shoreline change analysis python
- How to fetch and align tide gauge data in Python tide gauge data python
- How to map coastal inundation from a DEM in Python coastal inundation mapping python
- How to compute distance to the coast for many points distance to coast python
- How to clip a dataset to an exclusive economic zone clip to eez python
- How to clean AIS vessel tracks in Python clean ais data python
- How to generate depth contours from bathymetry depth contours python
- How to subset an ocean model NetCDF by depth and time ocean netcdf subset python
- Bathymetry depths are positive in one file and negative in another bathymetry sign convention
- A coastline or EEZ breaks at the antimeridian antimeridian polygon problem
- An inundation map floods inland areas that cannot flood bathtub inundation wrong
- Tide times are off by hours after a join tide times wrong timezone
- AIS tracks jump across the world ais track jumps
Agriculture & vegetation 20 guides
- Vegetation indices explained: NDVI, EVI, NDRE and when each fails ndvi evi ndre compared
- Crop phenology and growing seasons explained crop phenology remote sensing
- Field boundary data explained: where it comes from field boundary data
- Management zones explained management zones precision agriculture
- Yield monitor data explained: what the numbers really are yield monitor data
- Growing degree days explained growing degree days
- How to delineate field boundaries from imagery in Python delineate field boundaries python
- How to classify crop types from a satellite time series crop type classification python
- How to clean yield monitor data in Python clean yield monitor data python
- How to build management zones with clustering in Python management zones clustering python
- How to extract phenology metrics from an NDVI time series phenology metrics ndvi python
- How to calculate growing degree days from gridded weather growing degree days python
- How to lay out a soil sampling grid in Python soil sampling grid python
- How to write a variable-rate prescription map variable rate prescription map
- How to analyse an on-farm strip trial in Python on farm strip trial analysis
- Delineated field boundaries merge fields or swallow roads field delineation merges fields
- A crop classifier confuses two crops every year crop classifier confuses classes
- A yield map has impossible values and stripes yield map stripes impossible values
- NDVI stops responding in a dense canopy ndvi saturation dense canopy
- A prescription map is rejected by the machine controller prescription map not loading