I've been working with GRASS GIS for about two months. I have to develop a method for the identification of target regions of small hydropower plants. Boundary conditions are a predetermined minimum and maximum flow and a minimum and maximum height of drop. Here is a brief overview of the proposed method:

  • define discrete Points of River (each 50m) and give them elevation information (height)
  • basin determine for each Point
  • calculate outflow for each point and check boundary conditions
  • calculate: P = Q * delta_h * g * density between points

My Problem is, I don't know how to realize the first Step with Grass. I found some information about LRS (Line Reference System), v.to.point and more.

  1. I fail to see how I put these points and correlating them height values.
  2. What should I do so that I can make on the basis of each set point a analysis (catchment area of each point). Generally speaking, I do not know how to make an analysis that is based on set points.

My Idea was to create specific Points (e.g. each 50 meters), paste them into an attribute table (v.to.db) and then convert them to an CSV file (with v.out.ascii). Next step is to loop the r.water.outlet (example: How to do the loop when using GRASS module r.water.outlet?) for each point by using a CSV file.

However, I have my problems with it.

Do you think this is the wrong way? Your way is a completely different but sounds like a good solution. I want to understand why my approach is wrong.

Another question: How can I place equidistant vector points along a river? I can't find a good solution for that with GRASS.

The region size is about 5x5 km. Your idea is also a very good one but for my Bachelor thesis I have to do it as I describe. Maybe my method is better understood when I point my entire process here: Method_Part1


I also tried v.segment and v.to.points. But I can't choose an equidistant distance between points with that. So is there no other way?

  • You probably want to have a look at the set of modules: r.stream.* . Details are here: grasswiki.osgeo.org/wiki/R.stream.*_modules. You can use the r.stream.stats module to get slopes of each stream reach, and the r.stream.basins to get catchments for points along the streams.
    – Micha
    Feb 16, 2015 at 8:03

1 Answer 1


There are two GRASS modules for creating a set of points from a line vector: v.to.points or v.segment. The first will extract all the existing nodes from the line, and will stick in extra points if two nodes are more distant than dmax parameter. The second allows more accurate control over the exact locations of the points. See the manual pages for better descriptions.

But are you really interested in separate catchment basins every 50 m. along the streams? How big is the region? Won't You end up with hundreds or thousands of overlapping polygons?

The r.watershed module in GRASS (and all other hydrology processing software) first creates a flow accumulation grid. This gives the total number of upstream cells for each pixel in the region. I would guess that potential locations for a hydropower plant would require a certain minimum discharge. You might begin by extracting from that flow accumulation raster those pixels/points with high enough flow, and go from there.

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