Close, rippled surface of dark blue water
Photo: Jorge Vasconez, Unsplash

hydrostations

One API encompassing hydrological station catalogs from national agencies, research groups, and volunteer networks.

The motivation for hydrostations is observability.

More features of the water cycle are visible via remote sensing, and can be simulated through increasingly complex digital models. hydrostations exists to understand the distribution of in situ stations measuring hydrological parameters, providing insight into where we can, and cannot, see this vital resource.

The station is the unit of interest. hydrostations is designed to complement other tools in the space, like AquaFetch and hydrodownloadR.

Registry

Declared in YAML, not hardcoded per agency. source_class marks whether a feed is an official service, an academic compilation, or a volunteer network. Each comes with different liveness and quality expectations. The first column is what you'd pass to get_stations(source=…).

Compartment
Class
Source
Class
Compartments
Coverage
nwisUSGS National Water Information System
Agency
Q · GW
United States
bomBureau of Meteorology Water Data Online
Agency
Q · GW
Australia
ggmnGlobal Groundwater Monitoring Network
Research
GW
Global
wiseWater Information System for Europe
Agency
Q · GW · SW
Europe
hidrowebHidroWeb / SNIRH, Brazil
Agency
Q · P
Brazil
ecccWater Survey of Canada Hydrometric Network
Agency
Q
Canada
hubeauHub'Eau, France
Agency
Q · GW
France
nrfaNational River Flow Archive, UK
Agency
Q
United Kingdom
snotelSNOTEL / SCAN, Air and Water Database
Agency
SNOW · SM
United States (west + AK)
ghcndGHCN-Daily
Agency
P
Global
cocorahsCommunity Collaborative Rain, Hail & Snow Network
Citizen
P · SNOW
United States
grdcGlobal Runoff Data Centre
Agency
Q
Global
ismnInternational Soil Moisture Network
Research
SM · P · SNOW
Global
amerifluxAmeriFlux
Research
ET
Americas
sieremSIEREM, HydroSciences Montpellier
Research
Q · P
West Africa + Mediterranean (stub)

Coverage

Coverage is generated from each register's own declared coverage and compartments, not live station counts. Where a real country or continent shape is available it's clipped to the declared area; otherwise a bounding box is shown. Filter by compartment or toggle networks inside the map.

Snapshot generated by examples/render_coverage_map.py.

Crosswalk

hydrostations and the sibling package hydrocrosswalk are decoupled, but together they provide an interface to join a raw station pull with a watershed or other admin unit.

Snapshot generated by hydrocrosswalk/examples/render_map.py.

Quickstart

install

uv add hydrostations

fetch stations

from hydrostations import get_stations

stations = get_stations(
    basin="niger",
    compartment="Q",
)
# -> GeoDataFrame: canonical_id, source, source_id,
#    source_class, geometry, compartment, license, …

every record includes

  • raw the untouched native record
  • retrieved_at when this was actually fetched
  • redistribution_ok whether you can re-publish it