Concepts
In Geomorphometry.jl we provide a set of tools to analyse and visualize the shape of the Earth. The package is designed to be fast, flexible, and easy to use. It is built with the following concepts in mind:
Geospatially aware
With package extensions on GeoArrays.jl and Rasters.jl geospatial data is automatically handled to set the correct cellsize, even for geographical DEMs.
r = Raster("saba.tif")
Geomorphometry.cellsize(r)(5.0, -5.0)heatmap(multihillshade(r))
Multiple algorithms
We have implemented several algorithms for a common operation so that you can choose the one that best fits your needs. For example, the slope function has three methods: Horn, ZevenbergenThorne, and MaximumDownwardGradient, as shown in the Usage section.
Sometimes, as is the case for the FD8 algorithm, these methods take different parameters that influence the results. FD8 takes a p parameter that is used to weigh the flow direction, with higher powers resulting in less divergent flows (and thus more like D8).
acc, ldd = flowaccumulation(dtm; method=FD8(1))
heatmap(log10.(acc); colormap=:rain)
Multiple scales
Inspired by the excellent MultiScaleDTM package in R by Ilich et al. (2023), we have added multiscale options to some filters.
Relative terrain filters have a window keyword argument for a Stencil from Stencils.jl package.
Geomorphometry.Moore(1)Stencils.Moore{1, 2, 8, Nothing}
█▀█
▀▀▀heatmap(TPI(dtm, Geomorphometry.Moore(1)); colorrange=(0,25), colormap=:speed)
Other methods that require a specific type of window now take a radius kwarg, scaling said window.
Geomorphometry.scaled8nb(1)Stencils.NamedStencil{(:Z1, :Z2, :Z3, :Z4, :Z5, :Z6, :Z7, :Z8, :Z9), ((-1, -1), (0, -1), (1, -1), (-1, 0), (0, 0), (1, 0), (-1, 1), (0, 1), (1, 1)), 1, 2, 9, Nothing}
███
▀▀▀heatmap(profile_curvature(dtm, radius=1); colorrange=(-1,1), colormap=:tarn)