Site under development — the current data release is archived on Zenodo. Comments on the dataset are welcome in the open discussion at ESSD; anything else, [email protected]

Downloads

FullBasin has two levels. Regions are the 96 boxes the world is cut into. Basins are the 24,587,290 catchments inside them. Each level comes as the same three things: a raster, a table, a vector.

On top of that, two layers sit on every pixel: the upstream index, and sixteen upstream attributes.

Cite the data 10.5281/zenodo.20344113 · CC BY 4.0
Releases

v1 now, v2 after review

v2 is a repackaging, not a recomputation. The numbers do not change. The rasters become Cloud-Optimized GeoTIFFs, and the basins gain a vector form.

v1v2
Date22 May 2026after the ESSD review
DOI10.5281/zenodo.20344113same DOI, new version
RastersGeoTIFF, DEFLATE, one strip per rowCOG, 512×512 tiles, ZSTD‑15
TablesCSVCSV
VectorsnoneGeoPackage
Total142.2 GB, 100 filesabout 92 GB
Packingone zip per region, stored uncompressedsame

The zips are not compressed a second time — the GeoTIFFs inside are already DEFLATE-compressed, so there is nothing to gain. One consequence is useful: the bytes sit in the zip unchanged, so GDAL can read a single window out of a 3 GB zip without downloading it.

Open the Zenodo archive The MERIT Hydro layers underneath are not redistributed; they come from the MERIT Hydro team under their own terms.
This page

The masks as single files

This page is not a second archive. It carries the basin and region masks as single files, so you can see what the data looks like, check whether it fits your problem, and take one layer without downloading 142 GB.

Rasters — native 90 m

bsn_global_90m.tif the global basin mask — all 24,587,290 basins, down to the single-pixel coastal outlets · UInt32, nodata 0 · Cloud-Optimized GeoTIFF · 251 MB

rgn_global_90m.tif the global region mask — which of the 96 regions each pixel belongs to · UInt8, nodata 0 · Cloud-Optimized GeoTIFF · 34 MB

Tables — native 90 m

bat_global_90m_gt1km2.csv bat_global_90m.csv cut to the 340,991 basins above 1 km², all 27 columns · 60 MB. Those cover more than 99.5% of the land; the full table of 24,587,290 rows is on Zenodo.

rat_global_90m.csv the region attribute table — 96 rows, 11 columns · 10 kB

rat_global_90m_with_tiles.csv the same 96 rows with the full MERIT Hydro tile list for each region · 20 kB

Vectors — simplified

bsn_global_gt1km2.gpkg 340,955 basin polygons. Where a separate basin sits enclosed inside another it shows as a hole, so each polygon is the area that basin actually occupies · 143 MB

bnd_global_gt1km2.gpkg the outer boundary of those same basins, as lines. No interior holes — nicer to draw · 141 MB

rgn_global.gpkg the 96 region outlines · 22 MB

The outlines are simplified; the numbers are not. Kept at full resolution these polygons come to 6.9 GB, so they are simplified for use as a mask — to see extents, to clip by basin, to drop an outline into a figure. Every number — area, outlet, bounding box — is computed on the native 90 m grid and is not measured from these outlines; when the boundary itself matters, take the rasters. global_basin_id is the same in the vectors, the tables and the rasters, so they join directly. 36 of the 340,991 basins in the table are too small to survive the simplification and have no polygon.

This site runs on a basic hosting plan with a fixed number of requests a day. If a map stops loading, it is most likely that a lot of people are using it at once — try again in a few minutes. The archived files on Zenodo are never affected.

Table 1 of the paper

Every file in the dataset

This is Table 1 of the paper, with two columns added: where each file can be downloaded. All native-resolution rasters share one global grid, 432,000 × 174,000 pixels at 3 arcsec. The file-name wildcard * is the region_id, written without padding.

Read the compressed column, not the raw one. Nothing is distributed at its uncompressed size — that column is there to show what the compression is doing.

FileVariableTypeNoDataCompressedRawHereZenodo
Input baseline topology — MERIT Hydro, not redistributed
dir_global_90m.tifFlow directionUInt8247~6.5 GB~70 GB
upg_global_90m.tifFlow accumulation in cellsUInt320~18 GB~280 GB
upa_global_90m.tifFlow accumulation in km²Float32−9999~36 GB~280 GB
Basin and region masks with attribute tables — global
bsn_global_90m.tifBasin maskUInt320~0.8 GB~280 GB
rgn_global_90m.tifRegion maskUInt80~0.1 GB~70 GB
bat_global_90m.csvBasin attribute table — all 24,587,290 rows. Here: the 340,991 rows above 1 km² only.CSV4.3 GB
rat_global_90m.csvRegion attribute tableCSV10 kB
Basin and region masks with attribute tables — per-region tiles
bat_region*_90m.csvBasin attribute tableCSV6.3 GB
bsn_region*_90m.tifBasin maskUInt320~0.85 GB~280 GB
bsn_region*_90m_remapped.tifBasin mask renumbered with the local basin idUInt320~0.85 GB~280 GB
DFS interval index — per-region tiles
dfs_in_region*_90m.tifDFS entry timestampInt32−1~40 GB~280 GB
dfs_out_region*_90m.tifDFS exit timestampInt32−1~40 GB~280 GB
Upstream morphometric attributes — per-region tiles, populated where upstream area reaches 10 km²
mean_elev_upstream_region*_90m.tifMean upstream elevationFloat32−9999~3 GB~280 GB
min_elev_upstream_region*_90m.tifMinimum upstream elevationFloat32−9999~3 GB~280 GB
max_elev_upstream_region*_90m.tifMaximum upstream elevationFloat32−9999~3 GB~280 GB
std_elev_upstream_region*_90m.tifStandard deviation of upstream elevationFloat32−9999~3 GB~280 GB
mean_slope_upstream_region*_90m.tifMean upstream slopeFloat32−9999~3 GB~280 GB
std_slope_upstream_region*_90m.tifStandard deviation of upstream slopeFloat32−9999~3 GB~280 GB
perimeter_catchment_region*_90m.tifCatchment perimeterFloat32−9999~3 GB~280 GB
length_basin_region*_90m.tifBasin lengthFloat32−9999~3 GB~280 GB
width_basin_region*_90m.tifBasin widthFloat32−9999~3 GB~280 GB
convexity_planform_region*_90m.tifPlanform convexityFloat32−9999~3 GB~280 GB
relief_basin_region*_90m.tifBasin reliefFloat32−9999~3 GB~280 GB
hypsometric_integral_region*_90m.tifHypsometric integralFloat32−9999~3 GB~280 GB
elongation_ratio_region*_90m.tifElongation ratioFloat32−9999~3 GB~280 GB
compactness_gravelius_region*_90m.tifGravelius compactnessFloat32−9999~3 GB~280 GB
circularity_ratio_region*_90m.tifCircularity ratioFloat32−9999~3 GB~280 GB
lemniscate_ratio_region*_90m.tifLemniscate ratioFloat32−9999~3 GB~280 GB

Added on this site

Five files that are not in the paper. They are cuts and vector forms of what is already in Table 1, made so the data can be opened without a raster workflow. The outlines are simplified — at full resolution they would come to 6.9 GB. They will go into Zenodo with v2.

FileWhat it isTypeSizeHereZenodo
bat_global_90m_gt1km2.csvThe basin table cut to the 340,991 basins above 1 km², all 27 columnsCSV60 MBv2
bsn_global_gt1km2.gpkg340,955 basin polygons, simplified, holes keptGeoPackage143 MBv2
bnd_global_gt1km2.gpkgOuter boundary of those basins, as lines, no holesGeoPackage141 MBv2
rgn_global.gpkgThe 96 region outlines, simplifiedGeoPackage22 MBv2
rat_global_90m_with_tiles.csvThe region table plus the MERIT Hydro tile list for each regionCSV20 kBv2
Level one · 96 rows

Regions

Global map of the 96 FullBasin processing regions, with a sample of the region attribute table beneath it.
Figure 3 of the paper. The 96 regions, and the rows of rat_global_90m.csv that describe them.

Every region box is a whole number of degrees. At 3 arcsec one degree is exactly 1,200 cells, so a region’s row and column offsets are always multiples of 1,200. That is why a region can be cut straight out of the global rasters with integer arithmetic — gdal_translate -srcwin and nothing else — with no resampling and no half-pixel shift.

IDs run 11–92 for the 65 continental regions, 10001–10002 for the two that cross the antimeridian, and 20001–20029 for the 29 island groups.

How the 96 regions were formed

Regions follow the manually drawn upper levels of HydroBASINS. Each basin is assigned to a level-3 polygon by area overlap; level-3 children are then merged back into their level-2 parent, but only where the merged region still fits inside an INT32 raster index. Parents that fail that test keep their level-3 children as separate regions. Basins that cross the antimeridian and isolated islands are grouped on their own. The result is 96 regions: 65 continental (IDs 11–92), two antimeridian groups (10001–10002) and 29 island groups (20001–20029).

Level two · 24,587,290 rows

Basins

Global map of the FullBasin basin mask, with a sample of the basin attribute table beneath it.
Figure 2 of the paper. The basin mask, and the rows of bat_global_90m.csv that describe them.

The raster and the table share one address. A basin ID read out of the mask is table_index + 1: basin 1 is row 0, basin 2 is row 1, and so on. Going from a pixel to its record is an array offset, never a join and never a lookup table. Rows are sorted by area, which is why basin 1 is the Amazon.

The full table has one row for every basin, down to the 13.3 million single-pixel coastal outlets. The cut below carries the 340,991 basins above 1 km², which together cover more than 99.5% of the land.

The outlines are simplified; the numbers are not. Every attribute column — area, outlet, bounding box — is computed on the native 3 arcsec (1/1200°) grid and is not measured from these outlines. When the boundary itself matters, take the 90 m rasters.

No download needed

Read one window over HTTP

Every file on this page is served with HTTP range requests, so GDAL, rasterio and DuckDB can read a window straight off the network.

import rasterio
url = "https://data.fullhydro.org/v1/bsn_global_90m.tif"
with rasterio.open(url) as src:
    basin_id = next(src.sample([(-60.0, -3.0)]))[0]

The Zenodo archive works the same way, and so does the inside of each zip, because the zips are stored uncompressed.

export GDAL_HTTP_USERAGENT="your-tool/1.0"   # Zenodo rejects an empty user agent

ZIP=/vsicurl/https://zenodo.org/api/records/20344113/files/region_00064.zip/content
TIF=dfs_interval/dfs_in/dfs_in_region_00064_90m.tif

gdallocationinfo -valonly "/vsizip/{$ZIP}/$TIF" 16200 13200

Without GDAL_HTTP_USERAGENT the request comes back 403. Every other HTTP client sends a user agent by default; GDAL does not.

Reuse

How to cite

Dataset Jiang, L. et al. (2026). MERIT-FullBasin: a global 90 m basin dataset with a per-pixel upstream index and morphometric attributes. Zenodo. 10.5281/zenodo.20344113. CC BY 4.0, published 22 May 2026.
Paper Jiang, L. et al. (2026). Earth System Science Data, under review. 10.5194/essd-2026-402

The MERIT Hydro layers this is built on are not redistributed here. Cite them separately: Yamazaki et al. (2019), MERIT Hydro: a high-resolution global hydrography map based on latest topography datasets, Water Resources Research.