A cloud-native mirror of the European Commission Joint Research Centre's Global Human Settlement Layer, currently covering GHS-POP R2023A: modelled residential population per grid cell, twelve five-yearly epochs from 1975 to 2030, on the 100 m World Mollweide grid.
Every claim here is quoted from the source or measured from the published data.
Numbers without a stated source were produced by the scripts in
tools/ and recorded in
that repository's manifests/.
Modelled residential population per 100 m grid cell, from the JRC Global Human
Settlement Layer, GHS-POP R2023A. Twelve collections, one per five-yearly epoch
from 1975 to 2030, named pop-1975 through pop-2030.
The catalog contains 3,984 items. Each collection holds one item per tile, and
each item points to one COG. Cell values are persons per pixel; nodata is -200.
Every raster is on ESRI:54009 World Mollweide at 100 m. This is the single most important thing to know before writing a query, and it cuts both ways.
Mollweide is equal-area. Every cell covers the same ground area, so you can sum cells, compare densities between Norway and Kenya, and divide by cell area, without any latitude correction. That is why this grid was mirrored rather than the lat/lon one JRC also publishes.
But coordinates are metres from the projection origin, not degrees. A lat/lon bounding box must be transformed before it selects pixels.
STAC bbox and geometry are WGS84 because STAC requires it. The native extent
travels alongside in proj:bbox with proj:code. Work in proj:bbox for pixel
selection; the WGS84 envelope bounds a curved shape and is deliberately generous.
Tile filenames carry their grid position, R<row>_C<col>, and the grid is
regular, so this is arithmetic rather than a lookup:
Verified against gdalinfo on sampled COGs: every origin matched exactly.
Not every grid cell exists. Ocean-only cells are not published upstream, and 43 tile positions contain only nodata and are omitted from each epoch. A computed tile may therefore be absent.
Each collection ships every item in one STAC-GeoParquet file rather than
hundreds of JSON documents. The asset carries the collection-mirror role.
Every COG carries internal overviews and embedded per-band statistics, so a renderer can scale without reading pixels and a zoomed-out view does not fetch full resolution. Neither exists in the upstream files.
The twelve epochs share one grid, cell for cell, so a comparison needs no resampling or reprojection. Subtract them directly.
Two traps:
This is a derived product. Compression is LERC_ZSTD with a per-pixel error bound of 0.01 persons per cell, so any single cell may differ from the upstream value by up to that much.
Measured exhaustively across all 332 non-empty tiles of epoch 1975: total population is conserved to −0.000357%, which is 14,529 people out of 4,069,481,557, and no tile's total moved by more than 1,048 people.
Do not judge this by its worst relative figure. Dividing a fixed quantization
step by a nearly empty tile's total produces a large percentage from a
difference of a fraction of a person — in 1975 the worst relative delta was
−7.5%, on a tile holding 0.3 people. Read absolute figures, or the stratified
ones in each manifests/transform-<epoch>.json.
If you need bit-identical source values, use JRC's own distribution.
Each item carries a source asset pointing at the exact upstream ZIP it came
from, and its manifest entry records the SHA-256 of both that ZIP and the
resulting COG.
The upstream archive publishes no checksums, so these are ours: they prove the
mirror matches what was downloaded, not what JRC intended to publish.
Cite the source, not the mirror:
Schiavina M., Freire S., Carioli A., MacManus K. (2023): GHS-POP R2023A - GHS population grid multitemporal (1975-2030). European Commission, Joint Research Centre (JRC). doi:10.2905/2FF68A52-5B5B-4A22-8F40-C41DA8332CFE