Radial Density Profiles

Radial density profiles follow the method developed by Alain Bertaud to characterize the spatial structure of cities. They measure how population density varies with distance from the city centre.

Method

  1. Centre identification — the population-weighted centroid of each city is computed from H3 cells
  2. Ring construction — concentric rings of 1 km width are drawn outward from the centre
  3. Density aggregation — for each ring, we compute the average population density (persons/km²) of all H3 cells whose centroids fall within the ring
  4. Profile output — the result is a distance-density curve that reveals whether a city is monocentric (steep gradient), polycentric (multiple peaks), or dispersed (flat profile)

Why H3?

Radial profiles use the H3 hexagonal grid (resolution 8, ~0.74 km² per cell) rather than the regular 1 km grid. H3 cells have uniform area and compact shape, which reduces edge effects when assigning cells to distance rings.

Interpretation

  • Steep exponential decay — classic monocentric city (e.g., Paris, Buenos Aires)
  • Plateau then drop — large dense core (e.g., Mumbai, Dhaka)
  • Multiple peaks — polycentric structure (e.g., Ruhr area, Randstad)
  • Flat profile — dispersed, low-density sprawl (e.g., Atlanta, Houston)

Density Outlier Filtering

Some cities in the GHSL/UCDB dataset report unrealistically high population densities. These are not the world's densest cities — they are data artifacts caused by how satellite-derived population estimates interact with small city boundaries.

The problem

GHSL assigns population to ~1 km grid cells using satellite-detected built-up area and census disaggregation. When a city in the Urban Centre Database (UCDB) has a very small boundary polygon, it captures only a handful of these cells. If those cells happen to sit near a larger city's dense core, the population attributed to them can be disproportionately high, producing densities 2--5x higher than the densest real cities.

For example, a city boundary covering just 6 H3 cells (~4.4 km^2^) might report a density of 45,000 people/km^2^ — far exceeding Mumbai (~28,000/km^2^), the densest major city with over 1,000 cells of consistent data.

Filtering approach

We use a median-based two-tier filter to identify and exclude these artifacts from rankings and web exports. The filter computes each city's median density and median cell count across all 12 epochs (1975--2030), then applies two rules:

  • Tier 1 — Tiny cities: median cell count below 5 (~3.7 km^2^ for H3). Cities that are persistently this small across five decades of data lack enough spatial coverage for any meaningful density estimate. They are always excluded.
  • Tier 2 — Small + dense: median cell count below 50 (~37 km^2^) and median density above 20,000 people/km^2^. Cities that are consistently small and claim to be denser than the world's largest megacities are implausible — real cities at these densities have hundreds or thousands of cells.

Why medians?

Earlier versions of this filter checked whether a city triggered the outlier criteria at any epoch. This produced false positives for cities that were genuinely small in 1975 (when GHSL resolution was lower) but grew into legitimate urban areas by 2025. For example, Bajitpur in Bangladesh had just 4 cells in 1975 but 229 cells and 507,000 people by 2025.

Using medians across all epochs smooths out this early-epoch noise. A city is only excluded if it is persistently too small or persistently too dense — not because of a single noisy data point decades ago.

Where the filter is applied

  • Rankings — outliers are excluded before computing population, density, and growth rankings
  • City index — outliers are excluded from the search index
  • City population exports — outliers are excluded from the JSON files served to the frontend

Raw population data files (city_populations_*.parquet) are preserved unfiltered for research use.

Excluded cities

The filter currently excludes 59 cities out of 11,422 (0.5%). The table below lists all excluded cities, sorted by median density.

Tier 2 — Small + dense (38 cities)

Cities with fewer than 50 median cells and median density above 20,000/km^2^.

CityCountryPopulation (2025)Median densityMedian cells
TiquisioColombia196,51945,0456
SarvestanIran957,48342,36919
SafipurIndia54,69033,3185
Pingchang CountyChina129,63531,8445
ShelepinoRussia123,13130,7067
BangarmauIndia84,59730,2889
NarusSouth Sudan251,06629,7989
SandilaIndia102,08729,51410
SareynIran367,68929,15812
JalesarIndia59,62827,7235
BoloNigeria109,46926,9786
TogechaneEthiopia202,79226,8659
NimuleSouth Sudan628,62126,63418
HardoiIndia441,91425,86032
BetouRepublic of the Congo293,97425,41212
KharamehIran925,84723,87435
UigeAngola219,87923,79842
Al MasaliyahYemen120,64623,7365
QaraziadinIran216,43523,1349
FiltuEthiopia131,61922,8155
Adan BarakahYemen102,05322,6875
BugamaNigeria216,85622,66710
GhatampurIndia78,13222,5476
KerenEritrea234,15822,09418
Sikandra RaoIndia90,82722,0168
SherkotIndia92,75321,3225
SakjuNorth Korea52,38721,2855
PinillosColombia107,33221,1847
BadaunIndia357,23721,14418
KoksanNorth Korea87,95321,1238
KebkabiyaSudan683,64220,61918
DharwadIndia897,46420,60042
Fik'Ethiopia159,04020,4527
DirPakistan68,68320,4235
As SayyidYemen235,09620,29810
Mamrezpur AlIndia53,83320,2806
MawlamyinegyunnMyanmar175,79620,15110
JalalabadIndia79,06520,04610

Tier 1 — Tiny cities (21 cities)

Cities with fewer than 5 median cells across all epochs.

CityCountryPopulation (2025)Median densityMedian cells
(unnamed)Madagascar20,83226,8901
PhuntsholingBhutan73,97124,5324
YiliangChina61,48320,6424
JamameSomalia88,12719,8754
GarhmuktesarIndia63,93318,4334
KitotoloDemocratic Republic of the Congo71,89118,3944
AnupshahrIndia42,32717,3564
MasisiDemocratic Republic of the Congo57,78617,3204
QarabagAfghanistan42,44517,2623
SongweDemocratic Republic of the Congo37,42816,2163
SahabadIndia39,61415,6132
BialaEgypt55,64915,5934
SiyanaIndia50,95715,2964
Mutombo-LamataDemocratic Republic of the Congo39,92214,5233
GangohIndia42,49613,8544
SharaqpurPakistan44,51713,8254
SokuNigeria26,91613,8003
ChodavaramIndia42,28013,5764
MieziMozambique36,76911,6334
AlandaIndia31,08710,7044
BeheaIndia37,12810,1414

Geographic patterns

The excluded cities are concentrated in regions where GHSL disaggregation is least reliable:

  • India (16 cities) — high population density near small UCDB boundaries
  • Iran (4 cities) — small satellite cities near major urban cores
  • Democratic Republic of the Congo (4 cities) — sparse built-up area data
  • South Sudan, Sudan, Yemen, North Korea — limited ground-truth data for census disaggregation

Methodology

This page describes the analytical methods used to transform raw satellite data into the statistics and visualizations shown on The Urban World.

City definitions

Cities are defined using the GHSL Urban Centre Database (GHS-UCDB), which delineates functional urban areas based on population density contiguity rules. Each urban centre has a unique boundary polygon used to clip raster data.

Population and density

For each city and epoch, we sum population grid cells (GHS-POP) falling within the city boundary to get total population. Density is computed as population divided by the built-up area (GHS-BUILT-S) within the boundary.

Rankings

City rankings are computed per epoch. Population rank orders cities by total population. Density rank uses population-weighted density to avoid distortion from low-density periphery cells.

Density outlier filtering

Some cities in the GHSL/UCDB dataset have unrealistically high densities caused by population disaggregation artifacts in small city boundaries. We use a median-based statistical filter to exclude these from rankings and exports. See Density Outlier Filtering for details and a full list of excluded cities.