Skip to main content

easysnowdata

PyPI conda-forge DOI CI

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.

easysnowdata example 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-22 01:46 UTC
⚠️ = skipped (credentials not available in this run). Latency and virtualization probes are on the status page.

Stations (esd.stations)

Data Source Latest (Sep 21) Sep 17 Sep 14 Sep 7
AWDB stations (NRCS REST API) ✅ ✅ — —
CDEC stations (JSON data servlet) ✅ ✅ — —
BC snow stations (DataBC WFS) ✅ ✅ — —
NVE stations (HydAPI) ❌ ⚠️ — —
Yukon stations (AquaCache API) ✅ ✅ — —
Snow station inventory (global_snow_networks) ✅ ✅ ✅ ✅
Snow station archive tarball (global_snow_networks) ✅ ✅ — —
Snow station CSV (global_snow_networks) ✅ ✅ ✅ ✅

Snow (esd.snow)

Data Source Latest (Sep 21) Sep 17 Sep 14 Sep 7
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) ✅ ✅ — —

SAR (esd.sar)

Data Source Latest (Sep 21) Sep 17 Sep 14 Sep 7
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) ✅ ✅ — —

Optical imagery (esd.optical)

Data Source Latest (Sep 21) Sep 17 Sep 14 Sep 7
HLS L30 (CMR-STAC LPCLOUD) ✅ ✅ — —
HLS S30 (Planetary Computer) ✅ ✅ — —
PlanetScope (Planet Data API) ❌ ⚠️ — —
Sentinel-2 L2A (Planetary Computer) ✅ ✅ — —
Sentinel-2 L2A (Earth Search) ✅ ✅ — —

Terrain (esd.terrain)

Data Source Latest (Sep 21) Sep 17 Sep 14 Sep 7
CHILI (GEE/CSP ERGo) ✅ ✅ ✅ ✅
Copernicus DEM (Planetary Computer) ✅ ✅ ✅ ✅
Copernicus DEM (Earth Search) ✅ ✅ — —

Land cover (esd.land)

Data Source Latest (Sep 21) Sep 17 Sep 14 Sep 7
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) ✅ ✅ ✅ ✅

Hydrography (esd.hydro)

Data Source Latest (Sep 21) Sep 17 Sep 14 Sep 7
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 ✅ ❌ ❌ ❌

Climate (esd.climate)

Data Source Latest (Sep 21) Sep 17 Sep 14 Sep 7
ARCO-ERA5 (GCS anonymous) ✅ ✅ ✅ ✅
ERA5 (Google Earth Engine) ✅ ✅ ✅ ✅
Köppen-Geiger classification (figshare) ✅ ✅ ✅ ✅

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 environments
pixi run -e test-py313 test-unit      # offline tests (no network, no credentials)
pixi run -e test-py313 test-live      # live tests against the data providers (credentialed ones skip without secrets)
pixi run -e docs 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

32 products across 8 themes, each with one or more access routes:

theme products open without an account
stations awdb-stations, cdec-stations, databc-stations, nve-stations, snow-station-archive, yukon-stations 5 of 6
snow modis-snow, mountain-snow-mask, snodas, snow-classification, ucla-snow-reanalysis, viirs-snow 4 of 6
sar sentinel-1-local-incidence-angle, sentinel-1-rtc 2 of 2
optical hls, planetscope, sentinel-2-l2a 2 of 3
terrain 3dep, alos-dem, chili, copernicus-dem, nasadem, srtm 4 of 6
land esa-worldcover, forest-cover-fraction, nlcd 2 of 3
hydro grdc-major-river-basins, grdc-wmo-basins, huc, hydrobasins 4 of 4
climate era5, koppen-geiger 2 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 (default)
dem = esd.terrain.dem.load(aoi, product="3dep")             # or NASADEM, SRTM, 3DEP, ALOS
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 a snow index written out rather than hidden in a helper
s2 = esd.optical.sentinel2.load(aoi, "2024-03", mask="scl-default")
ndsi = (s2["green"] - s2["swir16"]) / (s2["green"] + s2["swir16"])

# Maps with equal aspect, a scale bar and a graticule; legends from CF flags
esd.plotting.map(dem, cmap="terrain")
esd.plotting.categorical(esd.land.landcover.load(aoi))
esd.plotting.timeseries(obs["swe"])                         # calendar dates, units in [ ]

# What is available, and what it needs
esd.catalog.search("swe")
esd.catalog.describe("snodas")
esd.auth.status()

Coming from 0.0.x? The old module API (remote_sensing.get_*, automatic_weather_stations.StationCollection, …) was deprecated in 0.2 and removed in 0.3; the migration guide maps every old name to its replacement.

Documentation

Executed example gallery, data catalog and API reference: 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:

DOI

Metadata

Release files for easysnowdata 0.3.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for easysnowdata 0.3.2
File Size Uploaded
easysnowdata-0.3.2.tar.gz 630.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for easysnowdata 0.3.2
File Interpreter ABI Platform
easysnowdata-0.3.2-py3-none-any.whl Python 3 none any Details

Total release size: 970.3 kB

Release files / easysnowdata-0.3.2.tar.gz

Download URL easysnowdata-0.3.2.tar.gz
Size 630.1 kB
Tags Source
SHA-256 checksum
How to use checksums
77b0b85f0e5433113d180511cdb1b4202f862f48474f85e20fb842c41ff0c124
BLAKE2b-256 checksum
How to use checksums
cdbc8f0f5ccee7ad350169364781ce9ffeccf6961769c0b445312838806eb747
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.14

Release files / easysnowdata-0.3.2-py3-none-any.whl

Download URL easysnowdata-0.3.2-py3-none-any.whl
Size 340.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
8ccd3e07c67d5d6254ba2178929b2312f0b5e78c7943c00d49f708fcebe97318
BLAKE2b-256 checksum
How to use checksums
52170fa0dfb17e44fda1cb7f7cb690405f1e948cff4538f53c2fc633b4f77f70
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.14

Release history Release notifications | RSS feed

This release

0.3.2 This release

2 release files

0.3.1

2 release files

0.2.0

2 release files

0.0.25

2 release files

0.0.24

2 release files

0.0.22

2 release files

0.0.19

2 release files

0.0.18

2 release files

0.0.17

2 release files

0.0.16

2 release files

0.0.15

2 release files

0.0.14

2 release files

0.0.13

2 release files

0.0.12

2 release files

0.0.9

2 release files

0.0.8

2 release files

0.0.7

2 release files

0.0.6

2 release files

0.0.5

2 release files

0.0.4

2 release files

0.0.3

2 release files

0.0.2

2 release files

0.0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page