Global soil properties from ISRIC SoilGrids v2.0 as an analysis-ready Icechunk Zarr store. Two groups on a single 250 m Interrupted Goode Homolosine grid: ten depth-indexed properties (sand, silt, clay, bulk density, organic carbon, carbon density, nitrogen, pH, CEC, coarse fragments) on the six standard SoilGrids intervals to 200 cm, plus 2-D organic carbon stocks (0–30 cm). Mean predictions only. Values are float32 in conventional units (% sand, pH, kg/dm³) with NaN for no data, exactly invertible to the source integers — no scale factor to apply. Units, per-property model run, CRS, and citation are embedded as metadata; the CRS has no EPSG code, so transform coordinates before selecting. Sharded Zarr v3 layout: a point depth profile fetches tens of KB. Multiscale overviews (2×–256×) for map-scale reads. CC-BY 4.0.
Global soil properties from ISRIC SoilGrids v2.0 as an analysis-ready Icechunk Zarr store. Two groups on a single 250 m Interrupted Goode Homolosine grid: ten depth-indexed properties (sand/silt/clay, bulk density, organic carbon, carbon density, nitrogen, pH, CEC, coarse fragments) on the six standard SoilGrids intervals to 200 cm, plus 2-D organic carbon stocks (0–30 cm). Mean predictions only. Values are float32 in conventional units (% sand, pH, kg/dm³) with NaN for no data, exactly invertible to the source integers — no scale factor to apply. Units, per-property model run, CRS, and citation are embedded as metadata; the CRS has no EPSG code, so transform coordinates before selecting. Sharded Zarr v3 layout: a point depth profile fetches tens of KB. Multiscale overviews (2×–256×) for map-scale reads. CC-BY 4.0.
One Icechunk repository at v0.1.0.icechunk/, on SoilGrids' native grid — no
reprojection, no resampling:
spatial_ref variable carries the
WKT and GeoTransform, so rioxarray and GIS tools georeference the arrays directly.The depth_interval coordinate of soil_properties carries the six standard
SoilGrids intervals; auxiliary coordinates depth_top_cm and depth_bottom_cm carry
the same information numerically.
ocs (organic carbon stocks) is published only for 0–30 cm, which is not one of the
six, so it lives in profile_properties as a 2-D array rather than as a seventh
interval that every other property would be empty at.
Values are stored in the units you read column — the conversion from ISRIC's packed integers has already been applied. The last two columns record how the source publishes it, so the provenance stays checkable.
soil_properties — by depth intervalprofile_properties — one value per pixelsand, silt and clay are modelled jointly as a composition (ISRIC's RUN10
outputs, additive log-ratio transform), so the three sum to ~100 % wherever all three
have data. Every array's attributes record its own source_outputs_version, because
ISRIC built the properties in different model runs.
Units and conversion factors follow ISRIC's SoilGrids layer documentation, which is authoritative if you need to cross-check them.
A whole-globe view is one small read from a coarse level:
Interrupted Goode Homolosine, +proj=igh +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +units=m +no_defs. Three things to know:
crs.to_epsg() returns None. Use the crs_wkt attr on
spatial_ref, or the proj4 string in the root attrs. pyproj handles the projection
exactly — round-trips to nanometre precision.x
alone, so a 1-D lon would be wrong and a 2-D one would be 38 GB. Transform at
selection time, as above.NaN.Levels 2x … 256x are child groups with the same variables, coordinates and
attributes, so any level reads exactly like the native array. They follow the
zarr-conventions/multiscales layout
with GeoZarr proj:/spatial: companions.
Each level is a chained NaN-aware mean of the level above. That means mean-of-means with unequal valid counts, which is bounded but not identical to a direct mean from native. Use the native arrays for analysis and the overviews for display.
The store path carries the dataset version (v0.1.0.icechunk/). A new ISRIC release
gets a fresh path — this dataset has no time dimension, so releases replace rather
than append — and old paths stay readable. Pin a release with the immutable tag:
Tags are never deleted or reused; a corrected re-release gets a -r2 suffix.
Built from https://files.isric.org/soilgrids/latest/data/ with every source tile's
ETag recorded, so a rebuild detects ISRIC replacing data under the mutable latest/
path. Source provenance is carried per array: Code_version v2.0.0, WoSIS
Data stream 7, quantile regression forests, and a per-property
source_outputs_version. The tile manifest and validation reports are published under
audit/2.0.0/.
Every value is derived from the source by a single, exactly invertible scaling, and the pipeline verifies that by re-fetching random source tiles and comparing them pixel-for-pixel with the store. Pipeline and full data reference: https://github.com/colinahill/soilgrids_data
Licensed CC-BY 4.0, as the source is. Please cite:
Only the mean prediction. SoilGrids also publishes Q0.05, Q0.5 (median) and
Q0.95 for every layer, plus an uncertainty layer — 244 more layers, roughly a week
of transfer at the source's measured throughput. Also excluded: WRB soil-class
probabilities (a different product on an EPSG:4326 grid), the landmask, and ISRIC's
own 1 km/5 km aggregates (largely superseded by the 4x and 16x overviews here).
See docs/future-variables.md in the pipeline repo for what each would need.
phh2o |
| Soil pH in water |
| pH |
| pH × 10 |
| 10 |
sand | Proportion of sand particles (> 0.05 mm) in the fine earth fraction | g/100g (%) | g/kg | 10 |
silt | Proportion of silt particles (≥ 0.002 mm and ≤ 0.05 mm) in the fine earth fraction | g/100g (%) | g/kg | 10 |
soc | Soil organic carbon content in the fine earth fraction | g/kg | dg/kg | 10 |