Problems
Real geospatial problems, graded automatically. Choose a track, a level and what you want to hand in.
- Not started, Docks and bikes per borough, in one querySpatial analysisSQLPostGIS / SQLbeginnerDifficulty: beginner150 XP~25 min4 checksPostGIS / SQLbeginnerDifficulty: beginner
A point-in-polygon join with GROUP BY — and the outer join that keeps the boroughs with nothing to count.
You hand in a spatial SQL query.
Datasets
- London boroughs · Polygon · 33 features · EPSG:4326
- Santander Cycles docking stations (live snapshot) · Point · 799 features · EPSG:4326
What you’ll do
- Join stations to boroughs with a spatial predicate
- Aggregate per borough
- Keep every borough, including the ones outside the scheme
ST_ContainsGROUP BYouter jointransportLondonAlso trains Spatial AnalysisOpen problem - Not started, Normalise the map before you shade itCartographyGeoJSONCartographybeginnerDifficulty: beginner140 XP~25 min6 checksCartographybeginnerDifficulty: beginner
Turn a count into a rate: population per square kilometre for every country, with the area measured rather than looked up.
You hand in a GeoJSON result.
Dataset
- Countries · MultiPolygon · 241 features · EPSG:4326
What you’ll do
- Measure every polygon's area in an equal-area projection
- Compute a rate by dividing the count by the area
- Return every country, ready to shade
choroplethnormalisationEqual EarthdensityglobalAlso trains Spatial AnalysisOpen problem - Not started, Package one playground location per source featureData preparationDataset fileData ManagementbeginnerDifficulty: beginner130 XP~30 min6 checksData ManagementbeginnerDifficulty: beginner
Turn mixed playground points and areas into a projected GeoPackage site directory.
You hand in a prepared dataset file.
Dataset
- Sydney playground mixed-geometry source · Point · 8 features · EPSG:4326
What you’ll do
- Convert mixed source geometry into a consistent site layer.
- Reproject coordinates to the receiving metric CRS.
- Package exact schema and layer name in GeoPackage.
data-preparationsydneyfileAlso trains Spatial AnalysisOpen problem - Not started, Which airports sit inside a city?Spatial analysisGeoJSONSpatial AnalysisbeginnerDifficulty: beginner130 XP~20 min5 checksSpatial AnalysisbeginnerDifficulty: beginner
Point-in-polygon screening: the airports whose point falls inside a built-up footprint, for a noise-exposure programme.
You hand in a GeoJSON result.
Datasets
- World airports · Point · 893 features · EPSG:4326
- Urban areas · Polygon · 2,143 features · EPSG:4326
What you’ll do
- Test each point for containment in any polygon of a second layer
- Return the qualifying points once each, with their attributes
point-in-polygonspatial joinscreeningaviationglobalAlso trains Data ManagementOpen problem - Not started, Which boroughs is the cycle-hire scheme actually in?Spatial analysisGeoJSONSpatial AnalysisbeginnerDifficulty: beginner130 XP~25 min6 checksSpatial AnalysisbeginnerDifficulty: beginner
Join 799 docking stations to 33 boroughs and rank them by docks per square kilometre.
You hand in a GeoJSON result.
Datasets
- London boroughs · Polygon · 33 features · EPSG:4326
- Santander Cycles docking stations (live snapshot) · Point · 799 features · EPSG:4326
What you’ll do
- Spatially join docking stations to the borough that contains them
- Sum docking points per borough without dropping the boroughs that have none
- Measure borough area in a metric CRS and compute docks per km²
spatial joinaggregationCRStransportLondonAlso trains Data ManagementOpen problem - Not started, Which countries have no airport in the registry?Spatial analysisPythonPythonbeginnerDifficulty: beginner150 XP~30 min4 checksPythonbeginnerDifficulty: beginner
A points-in-polygons count as a script the grader runs: one row per country, zeros kept, on a global registry that misses a lot of places.
You hand in a Python script.
Datasets
- Countries · MultiPolygon · 241 features · EPSG:4326
- World airports · Point · 893 features · EPSG:4326
What you’ll do
- Read both layers from /data and join points to polygons with a spatial predicate
- Count per country without losing the countries that count zero
- Assign the finished GeoDataFrame, one row per country, to result
GeoPandasspatial joinreproducibilityaviationglobalAlso trains Spatial AnalysisOpen problem - Not started, Airports per state, as a script that runs againSpatial analysisPythonPythonintermediateDifficulty: intermediate190 XP~35 min5 checksPythonintermediateDifficulty: intermediate
Spatially join a global airport layer to US states and hand back one row per state, zeros included — in a script the grader runs.
You hand in a Python script.
Datasets
- United States states · Polygon · 51 features · EPSG:4326
- World airports · Point · 893 features · EPSG:4326
What you’ll do
- Read both layers from /data and join airports to states with a spatial predicate
- Count airports and major airports per state without losing a state that has none
- Assign the finished GeoDataFrame, one row per state, to the variable named result
GeoPandasspatial joinreproducibilityaviationAlso trains Spatial AnalysisOpen problem - Not started, At which zoom does the dock layer fit in a tile?Web deliveryAnswersWeb GISintermediateDifficulty: intermediate190 XP~30 min4 checksWeb GISintermediateDifficulty: intermediate
Count features per XYZ tile across zoom levels to set a vector-tile pipeline's minimum zoom and its per-tile limit honestly.
You hand in your answers as values.
Dataset
- Santander Cycles docking stations (live snapshot) · Point · 799 features · EPSG:4326
What you’ll do
- Convert coordinates to tile indices at several zooms
- Count features per tile and find the maximum
- Choose a minimum zoom from the data rather than a default
vector tilesXYZtippecanoezoom levelsLondonAlso trains Spatial AnalysisOpen problem - Not started, Build the global seismic reconnaissance watchlistDecision supportPythonSpatial AnalysisintermediateDifficulty: intermediate240 XP~40 min5 checksSpatial AnalysisintermediateDifficulty: intermediate
Turn a fixed USGS event feed into a mapped, reproducible shallow strong-event watchlist for requesting impact products.
You hand in a Python script.
Dataset
- Global M5.5+ earthquakes, Jan–Mar 2025 · Point · 86 features · EPSG:4326
What you’ll do
- Apply two inclusive, unit-aware filters to the frozen event snapshot
- Carry stable event identifiers and response metadata into a point GeoDataFrame
- Map event magnitude as a proportional point result without claiming it is impact
USGSearthquakesGeoPandasemergency screeningglobalAlso trains Python, Data Management, CartographyOpen problem - Not started, How big does Web Mercator make Greenland?CartographyAnswersCartographyintermediateDifficulty: intermediate210 XP~30 min4 checksCartographyintermediateDifficulty: intermediate
Put a number on the most famous distortion in cartography: the same countries measured on the ellipsoid and on the projection every web map uses.
You hand in your answers as values.
Dataset
- Countries · MultiPolygon · 241 features · EPSG:4326
What you’ll do
- Measure area geodesically or in an equal-area projection
- Project the same polygons to Web Mercator and take their planar area
- Express the distortion as ratios a reader can repeat
Web Mercatorprojectionarea distortionEqual EarthglobalAlso trains Spatial AnalysisOpen problem - Not started, How much of each borough lies below ten metres?Raster analysisGeoJSONSpatial AnalysisintermediateDifficulty: intermediate240 XP~40 min6 checksSpatial AnalysisintermediateDifficulty: intermediate
Threshold a DEM, count inside polygons, and turn pixels into square kilometres on a geographic grid — a flood-screening figure per borough.
You hand in a GeoJSON result.
Datasets
- Greater London elevation (Copernicus DEM GLO-30) · Raster · EPSG:4326
- London boroughs · Polygon · 33 features · EPSG:4326
What you’ll do
- Threshold a continuous raster
- Count the thresholded pixels per polygon
- Convert pixels to ground area on a geographic grid
DEMthresholdzonalpixel areafloodLondonAlso trains Remote SensingOpen problem - Not started, How much of Inner London is a five-minute walk from a dock?Spatial analysisGeoJSONSpatial AnalysisintermediateDifficulty: intermediate240 XP~45 min5 checksSpatial AnalysisintermediateDifficulty: intermediate
Buffer, dissolve and clip: the covered share of each Inner London borough at a 400 m walk.
You hand in a GeoJSON result.
Datasets
- London boroughs · Polygon · 33 features · EPSG:4326
- Santander Cycles docking stations (live snapshot) · Point · 799 features · EPSG:4326
What you’ll do
- Buffer 799 stations by 400 m in a metric CRS
- Dissolve the buffers into one coverage geometry
- Clip the coverage to each Inner London borough
bufferdissolveclipCRStransportLondonAlso trains CartographyOpen problem
12 of 36 problems shown