Problems
Real geospatial problems, graded automatically. Choose a track, a level and what you want to hand in.
- 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 - Not started, The buffer that shrank on the way to the mapCartographyAnswersCartographyintermediateDifficulty: intermediate200 XP~30 min4 checksCartographyintermediateDifficulty: intermediate
Quantify what a 400 m buffer drawn in EPSG:3857 actually covers on the ground in London, and how much of the coverage report it loses.
You hand in your answers as values.
Datasets
- Santander Cycles docking stations (live snapshot) · Point · 799 features · EPSG:4326
- London boroughs · Polygon · 33 features · EPSG:4326
What you’ll do
- Derive the Web Mercator scale factor at London's latitude
- Translate a projected buffer distance into its ground equivalent
- Re-run the coverage analysis with the shrunken buffer and measure the shortfall
Web Mercatorscale factorprojectionbufferLondonAlso trains Spatial AnalysisOpen problem - Not started, Where are the bikes, as a share of the docks?Spatial analysisPythonPythonintermediateDifficulty: intermediate190 XP~35 min5 checksPythonintermediateDifficulty: intermediate
A scripted per-borough ratio from a live snapshot: bikes over docking points, every borough kept, so it can run again on the next snapshot.
You hand in a Python script.
Datasets
- London boroughs · Polygon · 33 features · EPSG:4326
- Santander Cycles docking stations (live snapshot) · Point · 799 features · EPSG:4326
What you’ll do
- Read both layers from /data and assign stations to boroughs with a spatial predicate
- Sum two columns per borough and compute their ratio, with zero where the denominator is zero
- Assign the finished GeoDataFrame, one row per borough, to result
GeoPandasspatial joinratioreproducibilitytransportLondonAlso trains Spatial AnalysisOpen problem - Not started, Where should a waterway survey start?Decision supportSQLSpatial AnalysisintermediateDifficulty: intermediate320 XP~50 min9 checksSpatial AnalysisintermediateDifficulty: intermediate
Screen large global urban footprints for mapped river contact while keeping scale limitations explicit.
You hand in a spatial SQL query.
Datasets
- Urban areas · Polygon · 2,143 features · EPSG:4326
- Rivers and lake centrelines · LineString · 461 features · EPSG:4326
What you’ll do
- Apply a spatial join to real river and urban geometry
- Keep zero-contact footprints in the inventory
- Distinguish map-scale contact classes for survey planning
Natural Earthurban waterPostGISspatial screeningcategorical mapglobalAlso trains PostGIS / SQL, Cartography, Data ManagementOpen problem - Not started, Where should the sewer service desk review closure lag?Decision supportPythonSpatial AnalysisintermediateDifficulty: intermediate320 XP~50 min5 checksSpatial AnalysisintermediateDifficulty: intermediate
Turn a fixed 311 complaint cohort into a map of requests open longer than an analyst-defined day.
You hand in a Python script.
Dataset
- NYC 311 sewer requests, 1–7 June 2025 · Point · 408 features · EPSG:4326
What you’ll do
- Calculate closure lag from timestamp fields without inventing values for open requests
- Select the service manager's review queue
- Map the concentration of selected requests while retaining per-request details
NYC 311urban servicestemporal GISheat mapGeoPandasAlso trains Python, Cartography, Data ManagementOpen problem - Not started, Which airfields should the response desk check?Decision supportSQLPostGIS / SQLintermediateDifficulty: intermediate260 XP~45 min6 checksPostGIS / SQLintermediateDifficulty: intermediate
Use a metre-based spatial join to identify civil airfields near strong, shallow earthquake epicentres, with the facilities drawn on the map.
You hand in a spatial SQL query.
Datasets
- Global M5.5+ earthquakes, Jan–Mar 2025 · Point · 86 features · EPSG:4326
- World airports · Point · 893 features · EPSG:4326
What you’ll do
- Filter events by magnitude and depth
- Join the selected events to civil airfields within 250 km in metres
- Return traceable, mapped airport points and measured distances
PostGISearthquake responseairportsgeographyglobalAlso trains Spatial Analysis, CartographyOpen problem - Not started, Which boroughs have the least tree cover?Raster analysisGeoJSONRemote SensingintermediateDifficulty: intermediate230 XP~40 min7 checksRemote SensingintermediateDifficulty: intermediate
Zonal statistics on a categorical raster: the share of tree-cover pixels inside each borough polygon, for a tree-planting programme's targeting.
You hand in a GeoJSON result.
Datasets
- Greater London land cover 2021 (ESA WorldCover 10 m) · Raster · EPSG:4326
- London boroughs · Polygon · 33 features · EPSG:4326
What you’ll do
- Compute zonal statistics of a categorical raster over polygons
- Express the class as a share per zone
- Return the polygons ready for a choropleth
zonal statisticsland coverraster–vectorWorldCoverLondonAlso trains Spatial AnalysisOpen problem - Not started, Which capitals are more than an hour from a scheduled airport?Decision supportGeoJSONSpatial AnalysisintermediateDifficulty: intermediate230 XP~40 min5 checksSpatial AnalysisintermediateDifficulty: intermediate
Nearest-neighbour from 200 national capitals to 872 civil airports, geodesically, with a threshold that has to be applied honestly.
You hand in a GeoJSON result.
Datasets
- Populated places · Point · 1,251 features · EPSG:4326
- World airports · Point · 893 features · EPSG:4326
What you’ll do
- Filter the places to national capitals and the airports to civil scheduled-traffic fields
- Find each capital's nearest qualifying airport with a geodesic distance
- Keep the capitals beyond 75 km and report the airport and the distance
nearest neighbourgeodesichaversinelogisticsglobalAlso trains Data ManagementOpen problem - Not started, Which ports in the registry are the same port?Data qualityAnswersData ManagementintermediateDifficulty: intermediate190 XP~30 min4 checksData ManagementintermediateDifficulty: intermediate
Find probable duplicates in a facility registry by combining a name match with a distance rule — and separate them from the honest homonyms.
You hand in your answers as values.
Dataset
- Ports · Point · 1,081 features · EPSG:4326
What you’ll do
- Find repeated identifiers in a registry
- Combine an attribute match with a spatial rule to separate duplicates from homonyms
- Size the missing attribute that would resolve the rest
data qualitydeduplicationhaversineregistryglobalAlso trains Spatial AnalysisOpen problem
That’s all 14 problems.
Back to filters