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, snow products, climate reanalysis, DEMs and a hillshade, basins, and boundaries from countries and counties to mountain ranges and glacier outlines — under a consistent API that returns xarray objects (and GeoDataFrames for vector products). 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.

What a probe cannot see — a reprocessed collection, a republished file, a new release (the next Census year, a new RGI version) — is caught by a weekly upstream watch that opens one digest issue labelled upstream-watch and closes the previous one, carrying its unticked to-dos forward. The same digest lists datasets nobody has told us about yet: new snow, ice and frozen-ground collections in NASA's CMR, and new collections on Planetary Computer, Earth Search and both Earth Engine catalogs, under "Worth adding" when they are about the cryosphere.

Last updated: 2026-10-19 08:22 UTC
⚠️ = skipped (credentials not available in this run). Latency and virtualization probes are on the status page.

Stations (esd.stations)

Data Source Latest (Oct 19) Oct 12 Oct 5 Sep 29
AWDB stations (NRCS REST API) ✅ ✅ ✅ ✅
CDEC stations (JSON data servlet) ✅ ✅ ✅ ✅
BC snow stations (DataBC WFS) ✅ ✅ ✅ ✅
NVE stations (HydAPI) ✅ ✅ ✅ ✅
Yukon stations (AquaCache API) ✅ ✅ ✅ ✅
Snow station Zarr archive (global_snow_networks) ✅ ✅ ✅ ✅
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 (Oct 19) Oct 12 Oct 5 Sep 29
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 (Oct 19) Oct 12 Oct 5 Sep 29
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 (Oct 19) Oct 12 Oct 5 Sep 29
HLS L30 (CMR-STAC LPCLOUD) ✅ ✅ ✅ ✅
HLS S30 (CMR-STAC LPCLOUD) ✅ ✅ ✅ ✅
HLS L30 COG read (CMR-STAC LPCLOUD, Earthdata Login) ✅ ✅ ✅ ✅
HLS S30 COG read (CMR-STAC LPCLOUD, Earthdata Login) ✅ ✅ ✅ ✅
HLS L30 (Planetary Computer) ✅ ✅ ✅ ✅
HLS S30 (Planetary Computer) ✅ ✅ ✅ ✅
PlanetScope (Planet Data API) ✅ ✅ ✅ ✅
Sentinel-2 L2A (Planetary Computer) ✅ ✅ ✅ ✅
Sentinel-2 L2A (Earth Search) ✅ ✅ ✅ ✅

Terrain (esd.terrain)

Data Source Latest (Oct 19) Oct 12 Oct 5 Sep 29
CHILI (GEE/CSP ERGo) ✅ ✅ ✅ ✅
Copernicus DEM (Planetary Computer) ✅ ✅ ✅ ✅
Copernicus DEM (Earth Search) ✅ ✅ ✅ ✅
Copernicus DEM (Earth Engine) ✅ ✅ ✅ ✅
Copernicus DEM (OpenTopography) ✅ ✅ ✅ —
NASADEM (Planetary Computer) ✅ ✅ ✅ ✅
NASADEM (Earth Engine) ✅ ✅ ✅ ✅
NASADEM (OpenTopography) ✅ ✅ ✅ —
SRTM GL1 (OpenTopography) ✅ ✅ ✅ —
SRTM GL1 (Earth Engine) ✅ ✅ ✅ ✅
3DEP seamless (Planetary Computer) ✅ ✅ ✅ ✅
3DEP 10 m (Earth Engine) ✅ ✅ ✅ ✅
ALOS World 3D (Planetary Computer) ✅ ✅ ✅ ✅
ALOS World 3D (Earth Engine) ✅ ✅ ✅ ✅
ALOS World 3D (OpenTopography) ✅ ✅ ✅ —
GEDTM30 (OpenTopography) ✅ ✅ ✅ —
Natural Earth hillshade (S3) ✅ ✅ ✅ ✅

Land cover (esd.land)

Data Source Latest (Oct 19) Oct 12 Oct 5 Sep 29
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 (Oct 19) Oct 12 Oct 5 Sep 29
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 ✅ ✅ ✅ ✅

Boundaries (esd.boundaries)

Data Source Latest (Oct 19) Oct 12 Oct 5 Sep 29
Natural Earth countries (naciscdn) ✅ ✅ ✅ ✅
geoBoundaries countries (ADM0, gbOpen) ✅ ✅ ✅ ✅
Natural Earth states and provinces (naciscdn) ✅ ✅ ✅ ✅
US Census states (cartographic boundaries) ✅ ✅ ✅ ✅
geoBoundaries states and provinces (ADM1, gbOpen) ✅ ✅ ✅ ✅
US Census counties (cartographic boundaries) ✅ ✅ ✅ ✅
geoBoundaries admin units (ADM2, gbOpen) ✅ ✅ ✅ ✅
RGI 7.0 glacier outlines (NSIDC) ✅ ✅ ✅ ✅
RGI 6.0 glacier outlines (NSIDC) ✅ ✅ ✅ ✅
RGI 6.0 glacier outlines (OGGM mirror) ✅ ✅ ✅ ✅
GMBA mountains (EarthEnv) ✅ ✅ ✅ ✅
Natural Earth vector layers (naciscdn) ✅ ✅ ✅ ✅

Climate (esd.climate)

Data Source Latest (Oct 19) Oct 12 Oct 5 Sep 29
ARCO-ERA5 (GCS anonymous) ✅ ✅ ✅ ✅
ERA5 (Google Earth Engine) ✅ ✅ ✅ ✅
Climate indices (CPC RONI) ✅ — — —
Climate indices (NCEI PDO) ✅ — — —
Climate indices (PSL MEI.v2) ✅ — — —
Climate indices (PSL pdo.data) ✅ — — —
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 --all                    # every environment (plain `pixi install` sets up only the default one)
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-fast            # build the site without running the gallery
pixi run -e docs docs-serve           # serve the built site at http://localhost:8000

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_USERNAME + EARTHDATA_PASSWORD (recommended), a ~/.netrc entry from earthaccess.login(persist=True), or EARTHDATA_TOKEN. A token alone does not reach NSIDC's on-premises files (RGI glacier outlines, the NSIDC-0768 snow classification) or ASF's OPERA datapool, and user tokens expire after about 60 days urs.earthdata.nasa.gov
NVE HydAPI (Norwegian stations) NVE_API_KEY hydapi.nve.no
RIHMI АИСОРИ-М (Russian snow surveys, RIHMIClient) AISORI_USERNAME + AISORI_PASSWORD aisori-m.meteo.ru
Planet (PlanetScope, commercial) PL_API_KEY, or planet auth login planet.com

35 of the 41 products have at least one route that needs no account; each product's catalog page says which.

What is in it

42 products across 9 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, gedtm30, hillshade, nasadem, srtm 7 of 8
land esa-worldcover, forest-cover-fraction, nlcd 2 of 3
hydro grdc-major-river-basins, grdc-wmo-basins, huc, hydrobasins 4 of 4
boundaries admin-boundaries, countries, gmba-mountains, natural-earth-vectors, rgi-glaciers, states-provinces, us-counties 7 of 7
climate climate-indices, era5, koppen-geiger 3 of 3

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_gdf = esd.stations.inventory(aoi, daily_only=True)
obs_ds = esd.stations.load(inv_gdf, variables=["swe", "snwd"], time="2023-10/2024-09")

# Terrain, SAR, and snow water equivalent — lazy, Dask-backed, CRS attached
dem_da = esd.terrain.dem.load(aoi)                          # Copernicus GLO-30 (default)
dem_da = esd.terrain.dem.load(aoi, product="3dep")          # or NASADEM, SRTM, 3DEP, ALOS
dem_da = esd.terrain.dem.load(aoi, product="gedtm30")       # global bare-earth DTM (OpenTopography)
s1_ds = esd.sar.sentinel1.load(aoi, "2024-03", units="dB")  # Sentinel-1 RTC
snodas_ds = esd.snow.snodas.load(aoi, "2024-03")            # SNODAS, no account

# Boundaries as GeoDataFrames: states, counties, mountain ranges, glaciers
wa_gdf = esd.boundaries.admin.states(aoi)                   # Washington (US Census)
ranges_gdf = esd.boundaries.mountains.load(aoi)             # GMBA Mountain Inventory v2
glaciers_gdf = esd.boundaries.glaciers.load(aoi)            # RGI 7.0 (Earthdata username + password); RGI 6.0 from source="oggm-mirror" needs none

# Optical, masked, and a snow index written out rather than hidden in a helper
s2_ds = esd.optical.sentinel2.load(aoi, "2024-03", mask="scl-default")
ndsi_da = (s2_ds["green"] - s2_ds["swir16"]) / (s2_ds["green"] + s2_ds["swir16"])

# Maps with equal aspect, a scale bar, and a graticule; legends from CF flags
ax = esd.plotting.map(dem_da, cmap="terrain")
esd.plotting.add_outline(ax, glaciers_gdf)                  # vectors in the map's CRS
esd.plotting.categorical(esd.land.landcover.load(aoi))
esd.plotting.timeseries(obs_ds["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.3

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.3
File Size Uploaded Provenance
easysnowdata-0.3.3.tar.gz 986.6 kB Without provenance Details

Built distribution (wheel)

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

Total release size: 1.6 MB

Release files / easysnowdata-0.3.3.tar.gz

Download URL easysnowdata-0.3.3.tar.gz
Size 986.6 kB
Tags Source
SHA-256 checksum
How to use checksums
1558db7f0a5860640c8d891669a583fc38cc4c0b6e062d06d3afba07f2c5fe4c
BLAKE2b-256 checksum
How to use checksums
0a1bf8dc7510fa8787e1833ca3509bbee89078d83808e6964a4385575e7b67b7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.15

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

Download URL easysnowdata-0.3.3-py3-none-any.whl
Size 605.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
531ec9be3d882598526a00cc533741a3e49d81e1aa5d974f5b01cf86bfc25c51
BLAKE2b-256 checksum
How to use checksums
389dd95452e0ee3292bdcf675a2bbfbea4012b82ba0a5d9eb9969b12df90920e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.15

Security for easysnowdata 0.3.3

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

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