I would like to know if there is a way to identify lakes based on an elevation raster (like SRTM or ASTER)? As far as I can understand, it would mean identifying any cell below the elevation of neighbouring cells, but I can't find anything related so I suppose it's not that simple...

The closest thing I figured out was to use r.watershed to identify small basins (10 to 100 threshold), and then rank them according to their accumulation. Some basins show a quite higher level than the surrounding ones, so I figured out it could mean a lake or something...

Any idea of how to do it better, in GRASS or QGIS? Is it even possible?

  • 1
    I'm not sure about ASTER data but SRTM data have been processed so that all oceans, seas, and large lakes have a flat surface (uniform elevation). They're actually integer level data, so 'flat area' alone is not enough to pick out lakes. In Whitebox GAT, I do this all the time by digitizing seed points in the lakes in an SRTM DEM, then growing these points outward using the Simple Region Grow tool to delineate the lakes. It can be quite a quick operation when there are only a few dozen lakes and the digitizing part is the most time consuming. – WhiteboxDev Sep 19 '15 at 19:48
  • Alternatively, you could use a range filter on the DEM, flag all cells with range=0 (i.e. flat), clump or group the result, and then filter out all groups less than a certain area. This will only really work if your terrain doesn't contain large flat areas naturally and if your lakes are relatively large. – WhiteboxDev Sep 19 '15 at 19:52
  • Thank you WhiteBoxDev. I used r.slope.aspect and then selected all cells with 0 percent slope and converted them to vector. Comparing to satelite imagery, it looks like it matches the biggest lakes, and the main river beds. Now, being in an semi-arid region (north-eastern Brazil), many natural lakes could be dried out, and the only characteristic I could figure was an isolated cluster of lower elevation. But then, the seeding process would need to be computed for every single cell? – gvanhavre Sep 19 '15 at 20:29
  • No, the seeding operation would need to be done for each lake, not each cell. I'm surprised that you used aspect == 0 (i.e. north) and that that worked for you but, hey, whatever gets the job done. – WhiteboxDev Sep 20 '15 at 0:09
  • Actually I used slope in percents. It gave me only 10 cells with 0% (around 170 with 1% slope). I'll try to use these coordinates as seed points in Whitebox GAT, and see what happens. – gvanhavre Sep 20 '15 at 13:16

In your comments above you expressed interest in my suggested method, and so I am providing a more detailed answer here. The method uses the tools available in Whitebox GAT, the open-source GIS that I am lead developer of, but it is entirely possible that similar functions are available in QGIS and GRASS GIS such that you could use the same approach. I am also assuming that you're using SRTM DEM data, which has a good property for this application of having been processed such that large lakes have uniform elevation values. The first step is therefore to acquire the SRTM DEM of the area of interest. You can use Whitebox GAT's Retrieve SRTM DEM Data tool for this purpose, which will automatically import each of the titles for the area of interest, fill missing data gaps, and mosaic the tiles into a single DEM.

enter image description here

Now use the Create New Shapefile tool to digitize a seed point within each of the lakes of interest.

enter image description here

enter image description here

There is a tutorial in the Help menu that describes how to digitize features if that is needed. In the example above, I clearly only have a handful of large lakes, but if you have many lakes, this step may take a bit of time. You could also acquire the necessary seed points by extracting flat areas and then reducing each contiguous flat area to their center points and vectorizing these points; however, my worry is that in flatter terrain, the number of 'flat' points that aren't actually lakes may be quite high and you'll end up with spurious features. Also, remember that SRTM elevation data are stored as integer meters and so the number of grid cells that are apparently flat can be large even in moderately sloping terrain. If your lakes are relatively large and number in the 10s or 100s, then manual digitizing of the seed points is probably your best strategy. Smaller lakes probably haven't been corrected to possess uniform elevations in the SRTM data and so aren't able to be extracted using this approach.

Now use the Simple Region Grow tool with the seed points to delineate the full extent of each lake. I use '0' as the similarly threshold since the SRTM data has been corrected for uniform lake elevations.

enter image description here

enter image description here

Lastly, I tend to vectorize the lake polygons for overlay purposes using the Raster to Vector Polygons tool:

enter image description here

I've used this approach quite often and it is very robust although I would imagine that it would be time consuming if you have thousands of lakes. In that case, you'd probably need to use some automated method of finding the seed points (as described above).

  • 1
    I followed your instructions with a layer made of centroids of 0 and 1% slopes cells. As a result, most grown lakes are quite small in size (5 to 10 cells) and located on river beds, except a quite large one, which is actually a dam. Comparing to actual satelite imagery, I can find some local reservoirs (açudes) around the grown regions, so it would be indicating a match - or at least that people chose good places to dig their reservoirs. Thank you for your help, for your observations about SRTM data, and for developping Whitebox GAT! I've been looking for such a method for a long time. – gvanhavre Sep 20 '15 at 19:57
  • 1
    @gvanhavre I'm glad that it could be helpful. It's funny because I actually find myself mapping lakes fairly often using DEM data and it never occurred to me that there are others out there trying to do the same thing. I'm glad to see there are at least two of us ;) – WhiteboxDev Sep 20 '15 at 23:06
  • Few years later! I'm trying the new Whitebox tools in QGIS, but I can't find Simple Region Grow. Is it implemented yet? – gvanhavre Jun 12 '20 at 20:29

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.