遇见数据集

A global high-resolution dataset of snowmelt runoff onset timing from Sentinel-1 SAR, 2015-2024

收藏
Zenodo2026-04-23 更新2026-05-26 收录
官方服务:

资源简介:

Overview This dataset provides the first comprehensive global characterization of snowmelt runoff onset timing at high spatial resolution. Using Sentinel-1 C-band SAR data combined with a custom MODIS-derived snow phenology dataset, we detect characteristic backscatter minima that coincide with snowmelt runoff onset. The dataset covers nearly all seasonal snow on Earth for water years 2015–2024. The methodology leverages multi-orbit Sentinel-1 observations to identify the timing of minimum C-band backscatter, which coincides with the transition from the ripening phase to the runoff phase of snowmelt. A custom MODIS-derived snow phenology dataset constrains the temporal search window, ensuring detection occurs when and where seasonal snow exists. This dataset was evaluated against 735 snow pillow measurements from automated weather stations in the Western U.S., with a median timing difference of -1.0 days and a median absolute deviation of 9.0 days. We characterized how forest cover fraction, SWE, and temporal resolution affect agreement of runoff onset estimates between our products and the snow pillow measurements, and we provide empirically-derived usage recommendations based on this analysis. The associated publication contains the complete methodology for dataset creation and evaluation, as well as the context for proper interpretation and application of this dataset. Use of this dataset without consulting the associated publication is discouraged and may lead to inappropriate applications or misinterpretation of results. If you use this dataset in research, please cite the accompanying paper. Details Product source: Sentinel-1 C-band SAR VV-polarization (Microsoft Planetary Computer), MODIS MOD10A2 snow cover (Microsoft Planetary Computer) Format: Cloud-optimized Zarr archive (distributed as uncompressed .tar files) Spatial coverage: Global (60°S to 81.1°N, 180°W to 180°E), ~36.8 million km² total coverage Temporal coverage: Water Years 2015-2024 (October 1, 2014 to March 31, 2025) Coordinate system: WGS84 Geographic Coordinate System (EPSG:4326) Spatial resolution: 80 meters effective spatial resolution across all latitudes (pixel spacing ~7.2 × 10⁻⁴ degrees, corresponding to pixel spacing of ~80 meters at equator) Temporal resolution: Variable by location and water year (average 9.2 days globally, near daily in some locations) Array dimensions: Annual variables: (water_year: 10, latitude: 195970, longitude: 499998) Composite variables: (latitude: 195970, longitude: 499998) Data type: Signed int16 with scaling and offset parameters stored in the metadata NoData value: -9999 Variables runoff_onset: Annual snowmelt runoff onset dates (day of water year) [dimensions: water_year, lat, lon] Values: integer DOWY, valid range 1-366 Physical meaning: Timing of SAR backscatter minimum indicating runoff onset temporal_resolution: Temporal resolution in days for each water year [dimensions: water_year, lat, lon] Values: decimal days, precision limited to 0.1 days, valid range 0-30 days Physical meaning: Average time between Sentinel-1 observations used in runoff onset estimation for a specific pixel runoff_onset_median: 10-year median runoff onset timing [dimensions: lat, lon] Values: integer DOWY, valid range 1-366 Physical meaning: Median runoff onset date throughout WY2015-2024 (requires >=3 valid years) runoff_onset_mad: 10-year median absolute deviation of runoff onset [dimensions: lat, lon] Values: decimal days, precision limited to 0.1 days, valid range >1 days Physical meaning: Median absolute deviation in runoff onset timing throughout WY2015-2024 (requires >=3 valid years) temporal_resolution_median: 10-year median temporal resolution [dimensions: lat, lon] Values: decimal days, precision limited to 0.1 days, valid range 0-30 days Physical meaning: Median temporal resolution throughout WY2015-2024 (requires >=3 valid years) Water Year Definition Northern Hemisphere: October 1st of previous calendar year - September 30th of current calendar year e.g. WY 2015 is 2014-10-01 to 2015-09-30 (DOWY 1 = Oct 1, 2014) Southern Hemisphere: April 1st of current calendar year - March 31st of the following calendar year e.g. WY 2015 is 2015-04-01 to 2016-03-31 (DOWY 1 = Apr 1, 2015) Files in this record This dataset is provided in multiple forms so users can choose the most efficient access pattern for their needs: File Contents global_snowmelt_runoff_onset.zarr.tar Full dataset--complete Zarr store (all variables, all water years, all composites) global_snowmelt_runoff_onset.zarr.tar.refs.json Kerchunk-compatible reference file enabling partial remote reads of the complete tar without downloading in its entirety, see step 1a in example usage below global_snowmelt_runoff_onset_WY{2015..2024}.zarr.tar Annual Zarr stores (runoff_onset + temporal_resolution for a single water year) global_snowmelt_runoff_onset_composites.zarr.tar 10-year composite Zarr store (runoff_onset_median, runoff_onset_mad, temporal_resolution_median) Example usage The example below pulls all dataset variables for Mt. Rainier, WA to demonstrate data access, reprojection, and visualization of each product. In practice, queries should be narrowed to only the variables and water years actually needed. Steps 1a/1b/1c show three different ways to access the data. Steps 2 onward are identical regardless of access method. 1a. Recommended: Lazy remote access via the reference file (best for regional analysis) Open the complete dataset directly from Zenodo without downloading it in its entirety. A kerchunk-compatible reference file allows Zarr to fetch only the chunks your query touches via HTTP range requests. For a typical 100 km X 100 km region, one dataset variable for one year will fetch ~4 MB of data, or ~100 MB for all data variables across all water years (global_ds shown below). import fsspecimport xarray as xrimport rioxarray REF_JSON_URL = "https://zenodo.org/records/19618062/files/global_snowmelt_runoff_onset.zarr.tar.refs.json"mapper = fsspec.get_mapper("reference://",fo=REF_JSON_URL,remote_protocol="https")global_ds = xr.open_zarr(mapper, consolidated=False, decode_coords="all") Note: Zenodo enforces per-IP request rate limits; queries that fetch more than ~100 Zarr chunks may fail. You might notice this once you call .compute() (or any other call that triggers data download or computation). In this case, queries should limit the number of variables requested (e.g., global_ds[["runoff_onset_median"]] or global_ds[["runoff_onset"]].sel(water_year=slice(2019,2020)), reduce the geographic extent of the query (see step 2), or queries should be broken into smaller queries. Alternatively, users can opt to locally download the entire data archive, individual annual archives, or the 10-year composite archive (see 1b and 1c). 1b. Download and read the complete dataset (best for global analysis or offline work) Download and extract the complete tar (global_snowmelt_runoff_onset.zarr.tar). Warning: ~61 GB download. import xarray as xrimport rioxarray global_ds = xr.open_zarr( "global_snowmelt_runoff_onset.zarr", consolidated=True, decode_coords="all",) 1c. Download annual and/or composite files and combine (best for global analysis or offline work with just a subset of water years) Download and extract each tar file (global_snowmelt_runoff_onset_WY{2015..2024}.zarr.tar or global_snowmelt_runoff_onset_composites.zarr.tar), then combine them with xarray merge. You can also read a singular water year or the composite products alone, in which case you can just use a simple xarray.open_zarr() call. import xarray as xrimport rioxarray global_ds = xr.merge([ xr.open_mfdataset( "global_snowmelt_runoff_onset_WY*.zarr", engine="zarr", consolidated=True, decode_coords="all", combine="nested", concat_dim="water_year", ), xr.open_zarr( "global_snowmelt_runoff_onset_composites.zarr", consolidated=True, decode_coords="all", ),]) 2. Clip to Mt. Rainier, WA rainier_ds = global_ds.rio.clip_box(minx=-122, miny=46.7, maxx=-121.5, maxy=47, crs="EPSG:4326").compute() 3. Reproject to UTM Zone 10N for equal area visualization rainier_utm_ds = rainier_ds.rio.reproject("EPSG:32610") 4. Plot the 10-year composite products import matplotlib.pyplot as plt f, axs = plt.subplots(figsize=(12, 3), ncols=3, nrows=1)rainier_utm_ds["runoff_onset_median"].plot.imshow( ax=axs[0], cmap='viridis', vmin=110, vmax=270, cbar_kwargs={'label': 'day of water year'},)rainier_utm_ds["runoff_onset_mad"].plot.imshow( ax=axs[1], cmap='Reds', vmin=0, vmax=60, cbar_kwargs={'label': 'days'},)rainier_utm_ds["temporal_resolution_median"].plot.imshow( ax=axs[2], cmap='summer', vmin=1, vmax=20, cbar_kwargs={'label': 'days'},) for ax in axs: ax.axis('off') ax.set_aspect('equal') axs[0].set_title("10-year median snowmelt runoff onset")axs[1].set_title("10-year median absolute deviation")axs[2].set_title("10-year local median temporal resolution")f.tight_layout() 5. Plot the annual runoff onset and temporal resolution products rainier_utm_ds["runoff_onset"].plot.imshow(col='water_year', col_wrap=5, cmap='viridis', vmin=110, vmax=270, subplot_kws={'aspect': 'equal'}) rainier_utm_ds["temporal_resolution"].plot.imshow(col='water_year', col_wrap=5, cmap='summer', vmin=1, vmax=20, subplot_kws={'aspect': 'equal'}) Additional usage notes xarray.open_zarr() arguments consolidated=False is required in 1a because the consolidated metadata is inlined directly into the reference JSON rather than existing as a separate .zmetadata file in the store. In 1b and 1c the stores have regular consolidated metadata, so consolidated=True is used. decode_coords="all" is needed for rioxarray to recognize the spatial_ref grid mapping coordinate and enable .rio accessor operations like clip_box and reproject. mask_and_scale=True is the xarray default and applies the stored _FillValue (-9999) and scale_factor (0.1 for runoff_onset_mad, temporal_resolution, and temporal_resolution_median) automatically during read. Values will appear as NaN for no-data pixels and in decimal days for scaled variables. Pass mask_and_scale=False if you prefer to receive raw int16 values (e.g., for memory-efficient computation or custom handling of no-data). Chunk count for lazy data access method (1a) Here's some code for convenience to check the number of chunks in your dataset before you call compute... import numpy as npdef count_chunks(ds): return sum(np.prod([len(c) for c in ds[v].chunks]) for v in ds.data_vars if ds[v].chunks is not None) print(count_chunks(subset_ds)) Alternative access for heavy use For workflows requiring repeated high-volume access beyond what Zenodo supports, please contact the corresponding author to discuss alternative access arrangements. Before using this dataset, please consult Section 5.4 of the associated publication for recommendations for dataset users. Citation If you use this dataset, please cite: Gagliano, E., Shean, D., & Henderson, S. (2026). A global high-resolution dataset of snowmelt runoff onset timing from Sentinel-1 SAR, 2015-2024 [Data set]. Zenodo. https://doi.org/10.5281/zenodo.16953614. The associated publication (submitted to ESSD) should also be cited; a link will be added here when the preprint is posted. Resources global_snowmelt_runoff_onset: dataset generation code (github repository): https://github.com/egagli/global_snowmelt_runoff_onset Snow phenology dataset (Zenodo repository): https://zenodo.org/records/15692530 Snow phenology code (github repository): https://github.com/egagli/MODIS_seasonal_snow_mask

提供机构:
Zenodo
创建时间:
2025-12-30
二维码
社区交流群
二维码
科研交流群
商业服务