Skip to content

Catchments

Jip Claassens edited this page Jul 30, 2026 · 1 revision

A catchment is the area served by a central place. The model builds catchments by assigning every populated grid cell to the centre it can reach fastest over the road network, and then dissolving those assignments into polygons.

The template is Analyses/Prepare_Catchments_T. Preparation runs per continent; the actual catchment generation runs per country.

Choosing the centres

The centre set is a selection from the settlement hierarchy, controlled by three arguments:

  • Threshold. A settlement is a centre when it is a centre at the given threshold, in the sense of Settlement hierarchies.
  • Minimum population. An optional population floor.
  • FUA exclusion. When set, settlements inside an OECD functional urban area are excluded, and so are grid cells inside one. The analysis then describes the rural remainder of the country.

The configured variants are:

Variant Threshold Minimum population FUA exclusion
m10 10 min none no
m10_ex_fua 10 min none yes
m15 15 min none no
m20 20 min none no
m25 25 min none no
m30 30 min none no
m45 45 min none no
m30_50k 30 min 50 000 no

Connecting the grid

Every 1 km land cell is snapped to the nearest node of the final network, and accepted when that node is within 100 metres. This splits the cells into two groups:

  • Connected grids have a node and can be routed.
  • Unconnected grids have no node within reach. Islands without a mapped road, cells on the wrong side of a data gap, and cells in territories with no OSM coverage all land here.

Both groups keep their relation to the separated unit they belong to, which is what makes the next step work.

Assigning cells to centres

For connected cells the model computes a service area over the network. A single routing run from all centres at once gives, for every network node, the travel time to the nearest centre and the traceback of that shortest path. service_area turns those tracebacks into a partition of the network, and each connected cell inherits the centre of its node.

A gravity based alternative is configured as well, in which the pull of a centre is its population divided by a power of the travel time, with an exponent of minus 2. Cells are then assigned to the centre with the highest pull rather than the nearest one. It is switched off by default; Use_Grav_spec selects it.

Cells that remain without a value after this, for example because their node lies in a network fragment that no centre reaches, are given the value of the nearest cell that does have one.

Unconnected cells are handled per separated unit:

  • If the separated unit also contains connected cells, each unconnected cell takes the assignment of the nearest connected cell in the same unit. This handles a village at the end of an unmapped track.
  • If the separated unit contains no connected cell at all, the whole unit is assigned as one. The model computes the population weighted centroid of the unit, finds the nearest centre in the country to that centroid, and gives every cell in the unit that centre. This is how an island with no roads still ends up in a catchment.

From cells to polygons

Each grid cell is turned into a 1 km square in World Mollweide, and the squares sharing a centre are unioned into a polygon on the WorldMollweide_km integer grid. That is the initial catchment set.

The initial set has defects. A catchment can consist of several disconnected parts, because a faster road can carry cells on the far side of a barrier to a distant centre. Very small fragments appear along coastlines and borders. Ten cleaning iterations resolve these:

  1. Every catchment is split into its contiguous parts.
  2. For each part, the polygon connectivity graph gives its neighbours, and each neighbour pair gets a score. The score prefers a large population, penalises a merge that involves a functional urban area, and heavily penalises a merge back into the part that the piece was just split from.
  3. Each part proposes a merge target, mutual proposals are resolved, and parts are merged accordingly.
  4. The merged set becomes the input for the next iteration.

The result is a set of contiguous catchments, each carrying the label of the most populous settlement inside it.

Output

Per country, to %LocalDataProjDir%/Settlement_Catchments/all_settlements_<settlement set>/[without_fuas/]<threshold>_pop<minpop>/<continent>/<country>.shp:

Field Meaning
Geometry catchment polygon in World Mollweide
Pop summed population of the grid cells in the catchment
fua flag for a functional urban area based catchment
Label label of the most populous settlement in the catchment

Running it

GeoDmsRun.exe cfg\main.dms /Analyses/Create_Centres_Catchments/m10_ex_fua/<continent>/Country_Catchments/<country>/store_catchment

batch/gen_catchments.cmd loops this over a list of country codes per continent. Analyses/collect_results/catchment_areas collects the per country shapefiles of a variant into one global mosaic, skipping countries whose file does not exist yet.

Clone this wiki locally