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, How many tiles does an offline London need?Web deliveryAnswersWeb GISbeginnerDifficulty: beginner140 XP~25 min3 checksWeb GISbeginnerDifficulty: beginner
From a bounding box to a tile count: size the offline basemap for a field app across zoom 10–15.
You hand in your answers as values.
Dataset
- London boroughs · Polygon · 33 features · EPSG:4326
What you’ll do
- Take the bounding box of the borough layer
- Convert box corners to tile coordinates at each zoom
- Count tiles per zoom and total them into a storage estimate
XYZ tilesWeb Mercatorofflinecapacity planningLondonAlso trains CartographyOpen problem - Not started, Make the pharmacy handover loadableData preparationPythonData ManagementbeginnerDifficulty: beginner125 XP~25 min6 checksData ManagementbeginnerDifficulty: beginner
Repair a field table so a Paris health directory can map its pharmacy locations reliably.
You hand in a Python script.
Dataset
- Raw Paris pharmacy handover · Table · 21 rows · EPSG:4326
What you’ll do
- Parse and validate coordinates before constructing point geometry.
- Preserve the first source record for each reference.
- Deliver a typed, spatially plausible point layer.
data-preparationcoordinatesquality-controlparisAlso trains PythonOpen 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, What is Greater London made of?Raster analysisAnswersRemote SensingbeginnerDifficulty: beginner
A class histogram on a 10 m land-cover raster: the shares a planning document quotes, and the reason a pixel count is not quite an area.
You hand in your answers as values.
Dataset
- Greater London land cover 2021 (ESA WorldCover 10 m) · Raster · EPSG:4326
What you’ll do
- Read a categorical raster and count pixels per class
- Express classes as shares of the valid pixels
- State what the number is and is not
land coverWorldCoverhistogramrasterLondonAlso trains Data ManagementOpen problem - Not started, Which airport codes will break the schedule join?Data qualityAnswersData ManagementbeginnerDifficulty: beginner130 XP~25 min5 checksData ManagementbeginnerDifficulty: beginner
Audit a registry's identifiers before they become a join key: missing, malformed and duplicated codes, and positions that are only approximate.
You hand in your answers as values.
Dataset
- World airports · Point · 893 features · EPSG:4326
What you’ll do
- Find nulls, duplicates and malformed values in an identifier column
- Distinguish a key defect from a position defect
- Report counts the integration can be sized against
data qualityidentifiersjoin keysaviationAlso trains PythonOpen 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
12 of 57 problems shown