easysnowdata
A Python package to easily retrieve data relevant to snow science.
easysnowdata unifies access to a wide range of snow-relevant geospatial
datasets — weather stations, satellite imagery, climate reanalysis, DEMs, and
more — under a consistent API that returns xarray objects. The emphasis is on
minimising downloads and local computation by leveraging cloud-optimised data
formats wherever possible.
Gallery
One executed script per product — browse them, each with the code, the figure and a downloadable notebook.
Data Source Status
Every route of every product is probed weekly. A failure opens an issue
labelled data-source
and a recovery closes it; latency and DMR++ readiness are on the
status page.
Last updated: 2026-09-17 21:39 UTC
⚠️ = skipped (credentials not available in this run). Latency and virtualization probes are on the status page.
| Data Source | Latest (Sep 17) | Sep 14 | Sep 7 | Aug 31 |
|---|---|---|---|---|
| AWDB stations (NRCS REST API) | ✅ | — | — | — |
| CDEC stations (JSON data servlet) | ✅ | — | — | — |
| BC snow stations (DataBC WFS) | ✅ | — | — | — |
| NVE stations (HydAPI) | ⚠️ | — | — | — |
| Yukon stations (AquaCache API) | ✅ | — | — | — |
| SNOTEL/CCSS station list (GitHub) | ✅ | ✅ | ✅ | ✅ |
| Snow station archive tarball (global_snow_networks) | ✅ | — | — | — |
| SNOTEL/CCSS station CSV (GitHub) | ✅ | ✅ | ✅ | ✅ |
| ARCO-ERA5 (GCS anonymous) | ✅ | ✅ | ✅ | ✅ |
| ERA5 (Google Earth Engine) | ✅ | ✅ | ✅ | ✅ |
| Köppen-Geiger classification (figshare) | ✅ | ✅ | ✅ | ✅ |
| HUC geometries (USGS WBD REST) | ✅ | — | — | — |
| HUC geometries (GEE/USGS WBD) | ✅ | ✅ | ✅ | ✅ |
| HydroATLAS basins (figshare) | ✅ | ✅ | ✅ | ✅ |
| HydroBASINS (HydroSHEDS regional zip) | ✅ | — | — | — |
| HydroBASINS (GEE/HydroATLAS) | ✅ | — | — | — |
| GRDC major river basins (World Bank) | ✅ | ✅ | ✅ | ✅ |
| GRDC WMO basins | ❌ | ❌ | ❌ | ❌ |
| MODIS snow cover MOD10A1F (NASA NSIDC) | ✅ | — | — | — |
| MODIS snow cover MOD10A1 (Planetary Computer) | ✅ | — | — | — |
| Mountain snow mask (Zenodo) | ✅ | ✅ | ✅ | ✅ |
| SNODAS (NSIDC G02158) | ✅ | — | — | — |
| SNODAS (GEE/Climate Engine) | ✅ | ✅ | ✅ | ✅ |
| Sturm & Liston snow classification (NSIDC-0768) | ✅ | — | — | — |
| Sturm & Liston snow classification (Azure) | ✅ | ✅ | ✅ | ✅ |
| UCLA Snow Reanalysis (NASA NSIDC) | ✅ | ⚠️ | ⚠️ | ⚠️ |
| HMA Snow Reanalysis (NASA NSIDC) | ✅ | — | — | — |
| VIIRS snow cover VNP10A1F (NASA NSIDC) | ✅ | — | — | — |
| Forest cover fraction (Zenodo) | ✅ | ✅ | ✅ | ✅ |
| Forest cover fraction (GEE/CGLS-LC100) | ✅ | — | — | — |
| ESA WorldCover (Planetary Computer) | ✅ | ✅ | ✅ | ✅ |
| ESA WorldCover (AWS bucket) | ✅ | — | — | — |
| Annual NLCD (GEE community asset) | ✅ | — | — | — |
| NLCD (GEE/USGS) | ✅ | ✅ | ✅ | ✅ |
| HLS L30 (CMR-STAC LPCLOUD) | ✅ | — | — | — |
| HLS S30 (Planetary Computer) | ✅ | — | — | — |
| PlanetScope (Planet Data API) | ⚠️ | — | — | — |
| Sentinel-2 L2A (Planetary Computer) | ✅ | — | — | — |
| Sentinel-2 L2A (Earth Search) | ✅ | — | — | — |
| Sentinel-1 RTC (Planetary Computer) | ✅ | — | — | — |
| Sentinel-1 RTC OPERA (CMR-STAC ASF) | ✅ | — | — | — |
| Sentinel-1 RTC OPERA (Earth Engine) | ✅ | — | — | — |
| Sentinel-1 static layers (CMR-STAC ASF) | ✅ | — | — | — |
| Copernicus DEM for the incidence angle (Planetary Computer) | ✅ | — | — | — |
| Sentinel-1 GRD angle band (Earth Engine) | ✅ | — | — | — |
| CHILI (GEE/CSP ERGo) | ✅ | ✅ | ✅ | ✅ |
| Copernicus DEM (Planetary Computer) | ✅ | ✅ | ✅ | ✅ |
| Copernicus DEM (Earth Search) | ✅ | — | — | — |
Installation
pip install easysnowdata
conda install -c conda-forge easysnowdata
mamba install -c conda-forge easysnowdata
Development install (with pixi)
git clone https://github.com/egagli/easysnowdata.git
cd easysnowdata
pixi install # sets up the environment
pixi run test-unit # offline tests (no network, no credentials)
pixi run test-live # live tests against the data providers (credentialed ones skip without secrets)
pixi run docs-serve # preview the docs locally
Services that require account setup
Some data sources need free accounts and credentials passed as environment variables:
| Service | Env vars | Sign-up |
|---|---|---|
| Google Earth Engine | EARTHENGINE_TOKEN (or ~/.config/earthengine/credentials from ee.Authenticate()) |
earthengine.google.com |
| NASA Earthdata | EARTHDATA_TOKEN (recommended), or EARTHDATA_USERNAME + EARTHDATA_PASSWORD, or a ~/.netrc entry from earthaccess.login(persist=True) |
urs.earthdata.nasa.gov |
Planetary Computer and anonymous GCS access require no credentials.
What is in it
28 products across 8 themes, each with one or more access routes:
| theme | products | open without an account |
|---|---|---|
| climate | era5, koppen-geiger |
2 of 2 |
| hydro | grdc-major-river-basins, grdc-wmo-basins, huc, hydrobasins |
4 of 4 |
| land | esa-worldcover, forest-cover-fraction, nlcd |
2 of 3 |
| optical | hls, planetscope, sentinel-2-l2a |
2 of 3 |
| sar | sentinel-1-local-incidence-angle, sentinel-1-rtc |
2 of 2 |
| snow | modis-snow, mountain-snow-mask, snodas, snow-classification, ucla-snow-reanalysis, viirs-snow |
4 of 6 |
| stations | awdb-stations, cdec-stations, databc-stations, nve-stations, snow-station-archive, yukon-stations |
5 of 6 |
| terrain | chili, copernicus-dem |
1 of 2 |
Every product's routes, resolution, credentials, licence and health are on its own page: https://egagli.github.io/easysnowdata/catalog/.
Quick Start
import easysnowdata as esd
aoi = (-121.94, 46.72, -121.54, 46.99) # Mount Rainier; any AOI form works
# Snow stations: which are here, then one water year of observations
inv = esd.stations.inventory(aoi, daily_only=True)
obs = esd.stations.load(inv, variables=["swe", "snwd"], time="2023-10/2024-09")
# Terrain, SAR and snow water equivalent — lazy, Dask-backed, CRS attached
dem = esd.terrain.dem.load(aoi) # Copernicus GLO-30
s1 = esd.sar.sentinel1.load(aoi, "2024-03", units="dB") # Sentinel-1 RTC
swe = esd.snow.snodas.load(aoi, "2024-03") # SNODAS, no account
# Optical, masked and turned into a snow index
s2 = esd.optical.sentinel2.load(aoi, "2024-03", mask="scl-default")
ndsi = esd.processing.ndsi(s2)
# Categorical products carry CF flag attrs, so the legend draws itself
esd.plotting.categorical(esd.land.landcover.load(aoi))
# What is available, and what it needs
esd.catalog.search("swe")
esd.catalog.describe("snodas")
esd.auth.status()
The pre-0.1 API (easysnowdata.remote_sensing.get_*,
automatic_weather_stations.StationCollection, …) still works and emits a
DeprecationWarning naming its replacement. It is removed one minor release
after 0.1.
Documentation
Full API reference and example notebooks: https://egagli.github.io/easysnowdata
Contributing
Contributions welcome! See CONTRIBUTING for guidelines.
Citing
If you use easysnowdata in your research, please cite the Zenodo archive:
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file easysnowdata-0.2.0.tar.gz.
File metadata
- Download URL: easysnowdata-0.2.0.tar.gz
- Upload date:
- Size: 611.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.12.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1b01cdb16f32a56f576a4b102cde099359db1df0e2222c32cda504ee89a83ea6
|
|
| MD5 |
486e60d1975f00b2ab87aebb8ac83880
|
|
| BLAKE2b-256 |
e653fd0ec701406a9402f95085689568044078bdaebdd1700437e4ca0bc01e65
|
File details
Details for the file easysnowdata-0.2.0-py3-none-any.whl.
File metadata
- Download URL: easysnowdata-0.2.0-py3-none-any.whl
- Upload date:
- Size: 334.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.12.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a580565061dad9acd202dec4f15f1b3b720034e7984676dcfc64eaffb69ef334
|
|
| MD5 |
36391e3248d47fcc7e82129498abc0f0
|
|
| BLAKE2b-256 |
4e4708bcdd103f19069021e0e64bc28cd391421d22f866c3a90a7d21516eeed2
|