I have a DGM of an area in which I need to

  • Extract the valleys
  • Extract the ridges
  • Identify the areas which go from a valley up to 90% of the ridge height (e.g. a valley has an elevation of 0m, the closest ridge has an elevation of 100m -> I would want the area up to 90m), which means I have to assign each mountain to two valleys and vice versa

For extracting the valleys I figured to use the SAGA GIS tool "ta_compound 0". This gives me a line shapefile of the valleys. For extracting the ridges I found no more "elegant" way than reversing the raster values with a raster calculator in either QGIS or SAGA (e.g. all values * -1). The big issue is the identification of the areas. I have no idea, how I could do that. But I would like to do it in QGIS / SAGA GIS / with GDAL.

  • 1
    have you tried gdaldem tpi ? it is a relative index (neighbourhood size) but valleys and ridges ARE relative concepts. For automated processe, you could set a threshold on tpi to identify the areas – radouxju Sep 17 '20 at 13:18
  • yes, I tried this, but I am not sure, if I need rather line features or a raster / polygon of the mountains / valleys for the last step. – Zoe Sep 17 '20 at 13:22
  • 1
    my two pence is to build watersheds in order to assign valleys to ridge. Could you add a sketch of what you need to make sure that I understand well (you can edit your post, as you might know)? The conceptual pitfall is to determine what "heigth zero correponds to your ridge point. This is not a technical problem but a conceptual problem (it whould have been easy with 90% of the total height above water of the mountain) – radouxju Sep 17 '20 at 13:26

As pointed out by Radouxju this is rather conceptual problem, than technical. So I would just suggest one concept.

For fully automated process the most crucial from my perspective is to define what we consider to be ridge elevation.

This might hugely vary based on the landforming (geology) in your study area, and might need some testing.

For getting the right elevation cutoff for each valley I would suggest following:

  • Fix your DGM to be depression less (not contain sinks/lakes) - this is crucial if you want to make sure you won't get your valleys as multipolygons, though it is possible to go around it, and filter out possible little extra polygons at the end

  • Delineate watersheds as polygons from raster each with polygon id

  • Extract vertices as points keeping polygon ids (for grouping)

  • Run point sampling on your DEM (DGM)

  • Look at elevation histograms of some most representative point group

  • Do you see the ridge (ridges) in it? At what percentile typically? If you see it there, there is your ridge elevation. And you say 90% of it is the value you are looking for

  • Calculate the elevation value for each group as desired percentile, and through polygon ID assign back to polygons, so now you have your 'valleys' with cut off elevation values

From this moment there are multiple ways how to extract your 90% ridge elevation polygons, I would consider this two:

  • extract contours as polygons with reasonable elevation interval from your DEM, and clip your watershed polygons by these polygon contours where the elevation is more than your calculated 90% ridge elevation - this might be crazy expensive operation for large areas, especially for dense contour interval

  • or for each feature in watershed layer clip your raster (DGM), reclasify it to 1 (all values below your polygon cutoff), null rest, and vectorise the '1' area into polygon, which is your final desired polygons

Not very straight forward, is it? But I am not really aware about any one click tool for this. Good luck.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.