Calculating average slope from line using QGIS?

I have a raster dem from which I've created a slope. Then I'd like to calculate the average and maximum slope on each of some vector lines. I have a vague memory that I have seen a plugin for this but right now I can't seem to find it?

Basically I'm looking for something like the Zonal Statistic Plugin but instead of a polygon, I want to use lines.

• You will have several options depending on your expected outcome. For instance, (1) whether you want your datapoints along the line at each vertices (nodes) of your input line, or equal interval along the line, or at all intersecting cells of dem where your line overlays; (2) whether the measurement should be slope along the line or dem slope at each point. Jul 1 '17 at 23:10
• You can also use 'rasterize' method from Processing Tool Box and Raster Calculator. Jul 2 '17 at 13:12
• My idea is slope along the line I think. The reason I ask is that I have downhill ski slopes that need to have average and max slope. Jul 3 '17 at 5:43
• Got that. Then you will probably need high-density sampling interval (enough detail to respect each cell value) on profile tool. Jul 3 '17 at 6:13

This is an approach using qProf plugin, which provides slope value at the specified (equal) interval along the line. Choose Export tab and you will find Topographic profile data option, and then export the data as .csv. Your csv file will have a dirslop column which shows the slope along the line.

Notice it is negative when the slope (between measurement) is upward. Calculate absolute slope first and then average and maximum on your spreadsheet.

• Nice! I will try this method. I was hoping for a plugin that did exactly that job. Can't be that hard to create one? I'm thinking about all ski resorts around the world that would benefit from it. Jul 10 '17 at 20:52

Another approach uses rasterize method from Processing Tool Box and Raster Calculator. In my example, I used line vector layer and slope raster of next image: For rasterizing, you first need these raster parameters (see in Metadata Properties) from original raster:

Layer Extent (layer original source projection)
Pixel Size

However, 'Layer Extent' is not in order required for rasterize tool. Must be ordered as: xmin, ymin, xmax, ymax.

In my case, these parameters were:

354971.3488602247089148, 479272.4038835020037368, 4414903.3223166307434440, 4473428.4023900907486677

73.9887

and they were copy/paste at rasterized tool as in next image (id in line vector layer must be 1): After run, I got this rasterized line (pseudocolor with 2 classes and transparency for 0 values). This one is perfected aligned with original raster. Finally, I used next formula in 'Raster calculator expression':

( "Rasterized@1" )  * "utah_demUTM2_slope@1"

to get a new rasterized line; but with slope values instead. Red rectangle at next image point out your required statistic parameters, average and maximum slope, for this vector line. • Nice approach! I do prefer not converting the line to raster, but in worst case, this will work. Jul 10 '17 at 20:50

I dont know if my solution fit your request but: Given DEM=Lake_100m (raster) and Linea (SHP) calculate the slope on each segment of line

1) Explode Linea--->Segment

2) Field calculator

define two float field in Segment SHP

Z_end_point

raster_value('Lake_100m',1,make_point(x(end_point(\$geometry)),y(end_point(\$geometry))))

Z_start_point

raster_value('Lake_100m',1,make_point(x(start_point(\$geometry)),y(start_point(\$geometry))))

define field slope in segment SHP and calculate it:

slope= (Z_end_point-Z_start_point)/lenght(\$geometry)*100

Regards

• Is there a reason why you use make_point to construct a point, instead of simply using start_point(\$geometry)
– TimD
Aug 21 '19 at 4:20