Skip to main content

A package for topographic complexity analysis

Project description

pyTopoComplexity

DOI

pyTopoComplexity is an open-source Python package designed to measure the topographic complexity (i.e., surface roughness) of land surfaces using digital elevation model (DEM) data. This package includes modules for four modern methods used to measure topographic complexity in the fields of geology, geomorphology, geography, ecology, and oceanography.

Modules Classes Method Descriptions
pycwtmexhat.py CWTMexHat Quanitfy the wavelet-based curvature of the terrain surface using two-dimensional continuous wavelet transform (2D-CWT) with a Mexican Hat wevalet
pyfracd.py FracD Conduct fractal dimension analysis on the terrain surface using variogram procedure
pyrugostiy.py RugosityIndex Calculate rugosity index of the terrain surface
pytpi.py TPI Calculate Terrain Position Index of the topography

Installation

pip install pytopocomplexity

Modules for Surface Complexity Measurement

1. Two-Dimensional Continuous Wavelet Transform Analysis

from pytopocomplexity import CWTMexHat

The module pycwtmexhat.py uses two-dimensional continuous wavelet transform (2D-CWT) with a Mexican Hat wevalet to measure the topographic complexity (i.e., surface roughness) of a land surface from a Digital Elevation Model (DEM). Such method quanitfy the wavelet-based curvature of the surface, which has been proposed to be a effective geomorphic metric for identifying and estimating the ages of historical deep-seated landslide deposits. The method and early version of the code was developed by Dr. Adam M. Booth (Portland State Univeristy) in 2009, written in MATLAB (source code available from Booth's personal website). This MATLAB code was later revised and adapted by Dr. Sean R. LaHusen (Univeristy of Washington) and Dr. Erich N. Herzig (Univeristy of Washington) in their research (LaHusen et al., 2020; Herzig et al. (2023)). Dr. Larry Syu-Heng Lai (Univeristy of Washington), under the supervision of Dr. Alison R. Duvall (Univeristy of Washington), translated the code into this optimized open-source Python version in 2024.

2. Fractal Dimentsion Analysis

from pytopocomplexity import FracD

The pyfracd.py module calculates local fractal dimensions to assess topographic complexity. It also computes reliability parameters such as the standard error and the coefficient of determination (R²). The development of this module was greatly influenced by the Fortran code shared by Dr. Eulogio Pardo-Igúzquiza from his work in Pardo-Igúzquiza and Dowd (2022). The local fractal dimension is determined by intersecting the surface within a moving window with four vertical planes in principal geographical directions, simplifying the problem to one-dimensional topographic profiles. The fractal dimension of these profiles is estimated using the variogram method, which models the relationship between dissimilarity and distance using a power-law function. While the fractal dimension value does not directly scale with the degree of surface roughness, smoother or more regular surfaces generally have lower fractal dimension values (closer to 2), whereas surfaces with higher fractal dimension values tend to be more complex or irregular. This method has been applied in terrain analysis for understanding spatial variability in surface roughness, classifying geomorphologic features, uncovering hidden spatial structures, and supporting geomorphological and geological mapping on Earth and other planetary bodies.

3. Rugosity Index Calculation

from pytopocomplexity import RugosityIndex

The module pyrugosity.py measure Rugosity Index of the land surface, which is widely used to assess landscape structural complexity. By definition, the Rugosity Index has a minimum value of one, representing a completely flat surface. Typical values of the conventional Rugosity Index without slope correction (Jenness, 2004) range from one to three, although larger values are possible in very steep terrains. The slope-corrected Rugosity Index, also known as the Arc-Chord Ratio (ACR) Rugosity Index (Du Preez, 2015), provides a better representation of local surface complexity. This method has been applied in classifying seafloor types by marine geologists and geomorphologists, studying small-scale hydrodynamics by oceanographers, and assessing available habitats in landscapes by ecologists and coral biologists.

4. Terrain Position Index Calculation

from pytopocomplexity import TPI

The module pytpi.py calculates the Terrain Position Index (TPI) of the land surface following (Weiss, 2001), which is a measure of the relative topographic position of a point in relation to the surrounding landforms. This metric is useful for determining surface ruggedness, classifying terrain, assessing local hydrodynamics, and identifying habitat hotspots. TPI, also known as the Topographic Position Index in terrestrial studies, distinguishes landscape features such as hilltops, valleys, flat plains, and upper or lower slopes. In oceanography, researchers adapt the Bathymetric Position Index (BPI), which applies the equivalent TPI algorithm to bathymetric data to assess seafloor complexity. Positive TPI values indicate locations that are higher than the average of their surroundings (e.g., ridges), while negative values indicate locations that are lower (e.g., valleys). Values near zero indicate flat areas or areas of constant slope. The module also returns the absolute values of the TPI, which is suggested to be useful for quick assessments in mapping and relative dating of deep-seated landslide deposits using high-resolution DTM data (Lai et al., 2023).

Requirements

For pytopocomplexity package

  • Python >= 3.10
  • numpy >= 1.24
  • scipy >= 1.10
  • rasterio >= 1.3
  • dask >= 2024.3
  • matplotlib >= 3.7
  • tqdm >= 4.66
  • numba >= 0.57
  • statsmodels >= 0.14

License

pyTopoComplexity is licensed under the Apache License 2.0.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pytopocomplexity-0.8.0.tar.gz (30.7 kB view details)

Uploaded Source

Built Distribution

pytopocomplexity-0.8.0-py3-none-any.whl (30.8 kB view details)

Uploaded Python 3

File details

Details for the file pytopocomplexity-0.8.0.tar.gz.

File metadata

  • Download URL: pytopocomplexity-0.8.0.tar.gz
  • Upload date:
  • Size: 30.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.10.14

File hashes

Hashes for pytopocomplexity-0.8.0.tar.gz
Algorithm Hash digest
SHA256 747fcf985bd1199826d5ec6aeb970dc604f4f0d0bc363870d8517899cb0999bf
MD5 22be8492246c5ff486c9f34a424c4f39
BLAKE2b-256 0d3b052c8889fc4f655448e74c292b6d62126398434d422f6304b9881f0b0826

See more details on using hashes here.

File details

Details for the file pytopocomplexity-0.8.0-py3-none-any.whl.

File metadata

File hashes

Hashes for pytopocomplexity-0.8.0-py3-none-any.whl
Algorithm Hash digest
SHA256 7e85f8e4ddc907205eca2ab73ee7a706e8f8ac3e0de54fba118f25541474a943
MD5 bbd84d7e476d2f5e84d6198f30b767c5
BLAKE2b-256 250c08d42c8b0a43b644da50607482e7a4bfabd9f265cf41feb2b0510241040a

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page