Accessed from https://podaac.jpl.nasa.gov/dataset/MUR-JPL-L4-GLOB-v4.1.
Converted to COGs with STAC metadata.
The GHRSST Level 4 MUR (Multi-scale Ultra-high Resolution) Global Foundation Sea Surface Temperature Analysis (v4.1) provides a high-resolution, daily global assessment of ocean surface temperature. This dataset fuses observations from multiple satellite-borne sensors (including infrared and microwave radiometers) and in situ measurements, offering a robust and consistent picture of sea surface temperature conditions. The algorithm employs advanced interpolation and blending techniques to fill gaps caused by cloud cover and sensor discrepancies, resulting in a seamless, 1-kilometer-resolution global field. The “foundation” temperature represents the sea surface temperature free of diurnal warming effects, making it particularly valuable for climate studies, numerical weather prediction, and a variety of marine applications. The dataset is distributed by NASA’s Jet Propulsion Laboratory in collaboration with the Group for High Resolution Sea Surface Temperature (GHRSST), and is widely used by researchers, operational agencies, and policy-makers for informed decision-making in fields such as marine resource management, weather forecasting, and climate monitoring.
For more information, please refer to the documentation.
The code used to repackage this data is accessible here, and the documentation has background and examples for Python, R, GDAL, DuckDB and the browser.
Care has been taken to not change the source data, but just to repackage it into cloud optimised geotiffs with
STAC metadata. Each daily dataset is accessible in a <year>/<month>/<day> path, and file names are consistent with the
source data, e.g. 2025/06/01/20250601090000-JPL-L4_GHRSST-SSTfnd-MUR-GLOB-v02.0-fv04.1.stac-item.json, with one COG
per variable (..._analysed_sst.tif, ..._analysis_error.tif, ..._mask.tif, ..._sea_ice_fraction.tif and, where
the source has it, ..._sst_anomaly.tif).
Every COG is on the same north-up grid in EPSG:4326: 36000 by 17999 pixels of 0.01 degree, with its top-left
corner at -179.995, 89.995. Values are the source's integers, with nodata, scale and offset in the metadata. The
COG's own metadata and the STAC item's raster:bands agree: analysed_sst, analysis_error and sst_anomaly
unscale to degrees Celsius. The source is in Kelvin; only the offset differs (25 here, 298.15 in the source), so the
integers are unchanged.
MUR publishes each day twice: a near-real-time (NRT) version about 1 day after the date, then a final version, usually 9 days after it (occasionally later), which replaces it. New days are converted from the NRT version as soon as it's available, then re-converted once the final version is published.
Every STAC item says which version its COGs were made from:
The processing:* fields follow the STAC Processing extension.
Each item also has a derived_from link to the source NetCDF. For research that needs the
final analysis, filter on ghrsst:status = final.
When a day's final version replaces its NRT version, its COGs are re-made at the same
URLs, so the byte offsets inside them change. If you hold byte-range references to these
COGs (kerchunk, virtual Zarr, Icechunk virtual chunks), check file:checksum (or the HTTP
ETag) and regenerate the references when it changes.
To load a single day, you can do something like the following using Python:
And then to plot it, do:
Alternately, you can use the STAC Parquet file as an index to all the STAC docs.
ghrsst-mur-v2.vrt describes every COG as one GDAL multidimensional dataset:
five (time, y, x) arrays (analysed_sst, analysis_error, mask,
sea_ice_fraction, sst_anomaly) on the shared 0.01 degree grid, one time
step per day from 2002-06-01. It is rebuilt with the STAC Parquet file each
day and holds no data itself: reads go to the COGs, and only the COGs a read
touches are opened. Days without a file for a variable (sst_anomaly before
2014) read as nodata.
Scale, offset and units come from the STAC metadata, which matches the COG
headers: analysed_sst, analysis_error and sst_anomaly unscale to degrees
Celsius.
The VRT is one file of about 17 MB, but every day a read touches costs a read of that
day's COG header, so a long time series at one point takes a second or two per day.
Set GDAL_DISABLE_READDIR_ON_OPEN=EMPTY_DIR: without it, GDAL also lists each day's
folder and looks for sidecar files next to every COG, which roughly doubles the time
(a 10-day read took 38 s without it and 21 s with it).
Any reader of GDAL's multidimensional API can open it, for example an xarray backend for GDAL:
The 'analysed_sst' files are templated by:
Example for a specific date:
Strictly, we should check the catalogue first, which also says whether the day is final:
Read using the terra package (which applies the scale and offset, giving degrees Celsius):
Or alternatively, using gdalraster:
Or with stars:
To crop with the terra package:
Or, more generally, project (by_util is very important for COG efficiency):
We can also change CRS and resolution as desired:
Besides the multidimensional VRT above, more indexes that open the whole archive as one array per variable, without copying the data, will be published alongside the COGs: a flat tabular index of every tile (in addition to the STAC GeoParquet), kerchunk Parquet references and an Icechunk store. See Virtual stores.
The source is the GHRSST Level 4 MUR Global Foundation Sea Surface Temperature Analysis (v4.1), NASA JPL, distributed by PO.DAAC, doi:10.5067/GHGMR-4FJ04. To cite it, see: https://podaac.jpl.nasa.gov/CitingPODAAC
Data hosted by the PO.DAAC is openly shared, without restriction, in accordance with NASA's Earth Science program Data and Information Policy.