Add geomorphons and topographic openness

Open
#1,142 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
5/5
Estimated time
Over a week
Newbie friendliness
35/100
Issue type
Feature
Clarity
Mostly clear
Activity status
Quiet
Tech stack
python
Domain
data

Research direction

Start by inspecting the existing Weiss TPI-based landform classification and hydrology tools in xarray-spatial. Map the scope into geomorphons, positive and negative topographic openness, and per-basin hypsometric curves and integrals; done means all requested outputs, parameters, ray directions, and the stated dask or parallelization behavior are supported.

Written by the indexing model from the issue text.

Description

after-1.0.0-release enhancement

The current landform classification uses Weiss TPI-based classes, which are sensitive to window size and don't generalize well across scales. Geomorphons (Jasiewicz & Stepinski 2013) are a better alternative that classifies landforms using ternary pattern recognition from line-of-sight profiles.

Scope

Geomorphons. Produce a 10-class landform map (flat, summit, ridge, shoulder, spur, slope, hollow, footslope, valley, depression) from 8-direction line-of-sight profiles. Parameters: search radius and flatness threshold. Each pixel gets a ternary pattern based on whether neighboring terrain along each profile is higher, lower, or at the same level, and that pattern maps to one of the 10 forms.

Positive and negative topographic openness. For each cell, compute the mean zenith angle (positive openness) or mean nadir angle (negative openness) along 8 azimuth directions. These are related to but distinct from sky view factor. Positive openness highlights valleys and depressions; negative openness highlights ridges and peaks. Useful on their own as terrain visualization tools and as inputs to other analyses.

Hypsometric curves and integrals per basin. Given a DEM and basin delineation raster, compute the hypsometric curve (area-altitude relationship) and hypsometric integral for each basin. This pairs well with the existing hydrology tools.

Implementation notes

Geomorphons are straightforward to parallelize since each pixel looks independently along radial profiles out to the search radius. The only data dependency is the elevation values along each ray. This makes it a good candidate for GPU kernels where each thread handles one pixel and walks 8 directions.

For dask, use map_overlap with depth equal to the search radius.

Topographic openness follows the same pattern (8 radial profiles per pixel), so it can share the same ray-walking infrastructure as geomorphons.

Reference

Jasiewicz, J. & Stepinski, T.F. (2013). "Geomorphons — a pattern recognition approach to classification and mapping of landforms." Geomorphology, 182, 147-156.

Dominant language
Python
Stars
972
Forks
92
Avg merge
2d 12h
Merged PRs (30d)
7

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from xarray-contrib/xarray-spatial

All issues in xarray-contrib/xarray-spatial

Similar issues

More Python issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.