Skip to main content

License: GPL v3 pre-commit codecov

digital-rivers

digital-rivers is a small GIS utility library for Digital Elevation Model (DEM) processing and terrain analysis. It builds on GDAL and the pyramids raster wrapper to provide:

  • DEM processing — sink filling, D8 flow direction, flow accumulation, slope (stack-based DFS, no recursion-limit hacks).
  • Terrain visualisation — color relief, hill shade, slope, and aspect via GDAL's DEMProcessing.

The package exposes two classes: DEM and Terrain. Both subclass pyramids.dataset.Dataset, so any pyramids method works on them.

Naming note — the distribution name on PyPI is digital-rivers (with hyphen), the Python import name is digitalrivers (no separator).

Installation

The package is not yet published to conda-forge or PyPI. Install from source for now:

git clone https://github.com/serapeum-org/digital-rivers.git
cd digital-rivers
pixi install -e dev      # creates the dev environment
pixi shell -e dev

With pip

GDAL must already be importable. If you don't have it from conda-forge:

pip install git+https://github.com/serapeum-org/digital-rivers.git

Optional plotting extras (pulls cleopatra via pyramids' [viz] extra):

pip install "digital-rivers[viz] @ git+https://github.com/serapeum-org/digital-rivers.git"

Supported Python: 3.11–3.13.

Quick start

DEM processing

from osgeo import gdal
from digitalrivers.dem import DEM

dem = DEM(gdal.Open("path/to/dem.tif"))

filled = dem.fill_sinks()                  # remove single-cell sinks
slope = dem.slope()                        # max downhill slope (D8)
fd = dem.flow_direction()                  # 0–7 D8 codes
acc = dem.flow_accumulation(fd)            # upstream cell counts

You can pin the basin outfall direction via flow_direction(forced_direction=gdf) where gdf is a GeoDataFrame with geometry (point) and direction (int 0–7) columns.

Terrain visualisation

import pandas as pd
from digitalrivers.terrain import Terrain

terrain = Terrain("path/to/dem.tif")

# Hill shade
hs = terrain.hill_shade(azimuth=315, altitude=45)

# Color relief from a hex palette
palette = pd.DataFrame({
    "values": [0, 500, 1500, 3000],
    "color":  ["#3a7d44", "#f2cb05", "#bc4b51", "#8c8c8c"],
})
relief = terrain.color_relief(band=0, color_table=palette)

# GDAL-based slope and aspect
slope = terrain.slope(slope_format="degree", algorithm="Horn")
aspect = terrain.aspect(zero_flat_surface=True)

Project layout

src/digitalrivers/
  dem.py        — DEM class (hydrological analysis)
  terrain.py    — Terrain class (color relief, hill shade, slope, aspect)
tests/          — pytest suite + Coello river basin fixtures
examples/       — runnable scripts and notebooks
docs/           — MkDocs sources (MkDocs Material + mkdocstrings)

Documentation

Full API reference is built with MkDocs Material:

Development

This repository uses Pixi for environment management.

pixi run main          # run main test suite (excludes plot tests)
pixi run plot          # run plot/visualization tests
pixi run notebooks     # validate example notebooks
pre-commit run --all-files

See CLAUDE.md for more development notes.

License

GNU General Public License v3 — see LICENSE.md.

Metadata

Release files for digital-rivers 0.1.0

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

Source distribution (sdist)

Source distribution for digital-rivers 0.1.0
File Size Uploaded
digital_rivers-0.1.0.tar.gz 133.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for digital-rivers 0.1.0
File Interpreter ABI Platform
digital_rivers-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 280.7 kB

Release files / digital_rivers-0.1.0.tar.gz

Download URL digital_rivers-0.1.0.tar.gz
Size 133.4 kB
Tags Source
SHA-256 checksum
How to use checksums
c8142a0d8a560fa04fd1f285073082bdbae611216b8150f6f1f6910f92a23631
BLAKE2b-256 checksum
How to use checksums
8046b34c0920500e9fa3664273313bd5b1dd601082cd9f94b6381065b336798d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.14.4

Release files / digital_rivers-0.1.0-py3-none-any.whl

Download URL digital_rivers-0.1.0-py3-none-any.whl
Size 147.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
41e1fcb34c2b992626d5df61e413d767de1263fa293c8ceb64a5e5d02f15b085
BLAKE2b-256 checksum
How to use checksums
e91c671e73a0b3d3c4e9355d58aeecfdf29bb5c28421438926142783ae15d23f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.14.4

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files

0.0.0

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