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-26 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 26) Oct 19 Oct 12 Oct 5
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 26) Oct 19 Oct 12 Oct 5
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 26) Oct 19 Oct 12 Oct 5
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 26) Oct 19 Oct 12 Oct 5
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 26) Oct 19 Oct 12 Oct 5
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 26) Oct 19 Oct 12 Oct 5
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 26) Oct 19 Oct 12 Oct 5
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 26) Oct 19 Oct 12 Oct 5
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 26) Oct 19 Oct 12 Oct 5
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.4

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.4
File Size Uploaded Provenance Actions
easysnowdata-0.3.4.tar.gz 988.9 kB Without provenance Details for easysnowdata-0.3.4.tar.gz

Built distribution (wheel)

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

Total release size: 1.6 MB

Release files / easysnowdata-0.3.4.tar.gz

Download URL easysnowdata-0.3.4.tar.gz
Size 988.9 kB
Tags Source
SHA-256 checksum
How to use checksums
20734b832b788fd988db350a2417390a256674da14df998eb96de4d4f10e335d
BLAKE2b-256 checksum
How to use checksums
94cbecba26ed9696bd0b7f6da6368e6adcd3d6ef91c3f6e3a6cf15ddc2a950b6
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.4-py3-none-any.whl

Download URL easysnowdata-0.3.4-py3-none-any.whl
Size 606.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
176fc0b312b3b5a84359a1a356fac6d95b47d8dfd93d38f7f08b42568d2089fd
BLAKE2b-256 checksum
How to use checksums
15fd2c5b4571ed8c80596302f2a8ed4bf399fb7036d5adbddfd001aa54433620
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.4

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.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

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