Terrain attributes

Terrain attributes#

Terrain attributes generated from a DEM have a multitude of uses for analytic and visual purposes. Here is an example of how to generate these products.

For more information, see the Terrain attributes feature page.

References: Horn (1981) (slope, aspect, hillshade), Zevenbergen and Thorne (1987) (curvature), Riley et al. (1999) (terrain ruggedness index), Jenness (2004) (rugosity).

import matplotlib.pyplot as plt

import xdem

We load the example data.

dem = xdem.DEM(xdem.examples.get_path("longyearbyen_ref_dem"))

We generate multiple terrain attribute at once (more efficient computationally as some depend on each other).

attributes = xdem.terrain.get_terrain_attribute(
    dem.data,
    resolution=dem.res,
    attribute=["hillshade", "slope", "aspect", "curvature", "terrain_ruggedness_index", "rugosity"],
)

plt.figure(figsize=(8, 6.5))

plt_extent = [dem.bounds.left, dem.bounds.right, dem.bounds.bottom, dem.bounds.top]

cmaps = ["Greys_r", "Reds", "twilight", "RdGy_r", "Purples", "YlOrRd"]
labels = ["Hillshade", "Slope (°)", "Aspect (°)", "Curvature (100 / m)", "Terrain Ruggedness Index", "Rugosity"]
vlims = [(None, None) for i in range(6)]
vlims[3] = [-2, 2]

for i in range(6):
    plt.subplot(3, 2, i + 1)
    plt.imshow(attributes[i].squeeze(), cmap=cmaps[i], extent=plt_extent, vmin=vlims[i][0], vmax=vlims[i][1])
    cbar = plt.colorbar()
    cbar.set_label(labels[i])
    plt.xticks([])
    plt.yticks([])

plt.tight_layout()
plt.show()
plot terrain attributes

Total running time of the script: (0 minutes 10.695 seconds)

Gallery generated by Sphinx-Gallery