Problems
Real geospatial problems, graded automatically. Choose a track, a level and what you want to hand in.
- Not started, Can the cycle parking feed report real capacity?Data preparationSQLData ManagementbeginnerDifficulty: beginner130 XP~25 min7 checksData ManagementbeginnerDifficulty: beginner
Clean a Berlin cycle parking staging table for an operations map and capacity rollup.
You hand in a spatial SQL query.
Dataset
- Berlin bicycle parking capacity staging · Point · 27 features · EPSG:4326
What you’ll do
- Resolve source precedence before casting.
- Keep unknown capacity distinct from zero.
- Return geometry for the operational map.
data-preparationberlinsqlAlso trains PostGIS / SQLOpen problem - 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, How many mapped rivers touch each country?Spatial analysisSQLPostGIS / SQLbeginnerDifficulty: beginner150 XP~25 min4 checksPostGIS / SQLbeginnerDifficulty: beginner
ST_Intersects between lines and polygons with GROUP BY — and the outer join that keeps the countries with none.
You hand in a spatial SQL query.
Datasets
- Countries · MultiPolygon · 241 features · EPSG:4326
- Rivers and lake centrelines · LineString · 461 features · EPSG:4326
What you’ll do
- Join lines to polygons with a spatial predicate
- Aggregate per polygon
- Keep every polygon, including those with no match
ST_IntersectsGROUP BYouter joinhydrologyglobalOpen problem - Not started, Protect the bus stop key during the loadData preparationSQLData ManagementintermediateDifficulty: intermediate210 XP~40 min7 checksData ManagementintermediateDifficulty: intermediate
Recover zero-padded stop identifiers before a transport timetable join.
You hand in a spatial SQL query.
Dataset
- Singapore bus stop code staging · Point · 31 features · EPSG:4326
What you’ll do
- Preserve identifier semantics through SQL casting.
- Resolve repeated source rows deterministically.
- Return a clean point layer for the timetable join.
data-preparationsingaporesqlAlso trains PostGIS / SQLOpen problem - Not started, Redirect the rider at an empty dockDecision supportSQLPostGIS / SQLintermediateDifficulty: intermediate250 XP~40 min5 checksPostGIS / SQLintermediateDifficulty: intermediate
For every station with no bikes, the nearest station that has one, and the walk in metres — with the KNN operator so it stays fast at 799 stations or 79,000.
You hand in a spatial SQL query.
Dataset
- Santander Cycles docking stations (live snapshot) · Point · 799 features · EPSG:4326
What you’ll do
- Filter to stations with no bikes
- Find each one's nearest stocked station with an index-assisted nearest-neighbour search
- Report the distance in metres
KNNLATERALGiSTgeographyperformancetransportOpen 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, 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 ports are within 25 km of a capital?Spatial analysisSQLPostGIS / SQLintermediateDifficulty: intermediate220 XP~35 min5 checksPostGIS / SQLintermediateDifficulty: intermediate
ST_DWithin on geography: a proximity join in true metres that the index can still answer.
You hand in a spatial SQL query.
Datasets
- Populated places · Point · 1,251 features · EPSG:4326
- Ports · Point · 1,081 features · EPSG:4326
What you’ll do
- Write a proximity join with ST_DWithin
- Measure in metres on SRID 4326 data by casting to geography
- Keep the predicate in a form the GiST index can serve
ST_DWithingeographyGiSTproximityglobalOpen problem - Not started, Are these country polygons fit to assign cities to?Data qualitySQLPostGIS / SQLadvancedDifficulty: advanced300 XP~45 min5 checksPostGIS / SQLadvancedDifficulty: advanced
A point-in-polygon audit that exposes what 1:50m generalisation does to a coastline — and which places the attribute and the geometry disagree about.
You hand in a spatial SQL query.
Datasets
- Populated places · Point · 1,251 features · EPSG:4326
- Countries · MultiPolygon · 241 features · EPSG:4326
What you’ll do
- Join points to the polygon containing them with an outer join
- Compare an attribute to a derived value with NULL-safe semantics
- Return the disagreement list, including the points nothing contains
ST_Containsouter joinIS DISTINCT FROMgeneralisationdata qualityAlso trains Data ManagementOpen problem - Not started, Build an earthquake contact reconnaissance queueProjectDecision support3 stepsSpatial AnalysisadvancedDifficulty: advanced550 XP~95 min12 checksSpatial AnalysisadvancedDifficulty: advanced
Screen strong shallow events, quantify airfield and settlement proximity, and hand over a traceable contact map.
Worked in 3 steps, each checked before the next one opens.
- Select the event queue · SQL
- Measure contact gaps · Answers
- Hand over the access map · Python
Datasets
- Global M5.5+ earthquakes, Jan–Mar 2025 · Point · 86 features · EPSG:4326
- World airports · Point · 893 features · EPSG:4326
- Populated places · Point · 1,251 features · EPSG:4326
What you’ll do
- Select a reproducible event queue in SQL
- Measure two independent global proximity indicators
- Deliver an auditable access map with an explicit contact-gap distinction
projectUSGSnearest neighbourlogisticsglobalAlso trains Python, Data Management, CartographyOpen project - Not started, Deliver a compact sewer review mapProjectWeb delivery3 stepsWeb GISadvancedDifficulty: advanced580 XP~90 min9 checksWeb GISadvancedDifficulty: advanced
Extract a review cohort, make its browser payload inspectable, and measure the transfer budget.
Worked in 3 steps, each checked before the next one opens.
- Extract the review cohort · SQL
- Prepare the browser layer · Python
- Measure the transfer budget · Answers
Dataset
- NYC 311 sewer requests, 1–7 June 2025 · Point · 408 features · EPSG:4326
What you’ll do
- Query the exact review cohort
- Serve a compact, inspectable WGS 84 point layer
- Measure raw and compressed payload size from the delivered layer
NYC 311urban servicestemporal GISheat mapGeoPandasAlso trains PostGIS / SQL, PythonOpen project - Not started, Plan a cycle redistribution shiftProjectDecision support3 stepsSpatial AnalysisadvancedDifficulty: advanced600 XP~100 min11 checksSpatial AnalysisadvancedDifficulty: advanced
Classify the dock snapshot, propose bounded bike moves, and size the resulting shift with its unserved stations visible.
Worked in 3 steps, each checked before the next one opens.
- Classify the snapshot · SQL
- Map feasible transfers · GeoJSON
- Size the preliminary shift · Answers
Dataset
- Santander Cycles docking stations (live snapshot) · Point · 799 features · EPSG:4326
What you’ll do
- Classify full and empty active stations in SQL
- Build a bounded nearest-source transfer map
- Size a shift and report unserved empties from the same rules
nearest neighbouroperationscapacityCRStransportLondonAlso trains Data Management, GIS ArchitectureOpen project
12 of 14 problems shown