Land-Water differenciation

Hi, I have a task in which I need to difference between water layers and land during a period of time, to identify when and where parcels are being flooded from either heavy rains or intentionally (rice fields) during dry periods. I have been trying with NDWI but it is not fully accurate because when the water layer is very thin, it is now so clear to difference with non-flooded surfaces. See the following image, where in the right side there is a resevoir and in the center, some agricultural fields which I know that day had a thin water layer and with NDWI are not shown in blue:

Other combinations I’ve been checking is the Land/water: Land And Water Bands Usage In The Satellite Imagery
Also, I’ve tried with the Index Stack, (NDVI NDWI NDSI)
With these 2 options, some of the parcels appear in a highlighted color, but I am not sure what would be the most appropiate combination for this task.
Can anybody give some advice or some tips based on similar experiences?? Thanks in advance!

(edited by moderator to remove irrelevant links)

It’s not an easy solution as flooded parcels are usually a mixture of vegetation and water.
Using moisture index might help (e.g. where it is >0). Or Sentinel-1 data, VV.
I was playing with it a week ago. Check some images here:
(note that the link above will probably go away in a couple of weeks).
Inside you will also find Plattsmouth.json file, which is a set of Pins, which you can import in EO Browser to get direct insight (login to EO Browser, go to Pins and use Import pins).
I hope this helps.

Thanks a lot!! that can really help. What I am still struggling a bit is to get the index when I download the images in .tiff and open them in my desktop GIS. Instead of getting a pixel value to get the index as you said, to see where it is >0, I get the 3 bands value for each pixel. Maybe is very primary question but, how can it be calculated correctly? I tried using the raster calculator adding the 3 bands and then dividing by 3, but I’m afraid is not the right procedure…
Thanks a lot for your help!

I suggest you take a look at this FAQ (just modify it for your own index)

I’ve been testing this with moisture index, NDVI and NDWI. For determining parcels covered with a water layer, looks like NDWI values < 0 show clearly the parcels with a certain water layer. I’ve been checking comparing with different true image files and even when I put the threshold in values <-0.07 , it clearly show the difference between parcels covered by a thin water layer (e.g. rice fileds) and parcels which may have high moisture level but there is no water layer. If I use moisture index values, where it is >0, it shows parcels with water layer but also wet fields (e.g. irrigated fields in summer period, but not flooded).

It is actually not easy at all because is hard to differenciate when parcels have a mixture of vegetation and water.
Thanks a lot for your help. I will gather some images to show some results very soon!

yes, I have the some question, Did you find in any solution to get 1 band image with actual NDVI values?

See this FAQ, which can be applied for any index:


One option is to use the Swntinel-Hub plugin for QGIS. I would do the following:

1.- Create a layer in wms configurator with the script default: NDWI (Normalized Difference Water Index) - INDEX. Important: use Sentinel L2A without applying atmospheric correction (they are already corrected) or Sentinel L1C applying atmospheric correction

2- Using the sentinel-hub plugin, import the layer using the exact day option and the% of clouds that you think necessary

3.- In the download option in image type, use 32-bit Float Tiff. The resulting image contains values.

Thank you Alex and Grega for your contributions. Very interesting and useful!

1 Like

Thanks a lot @juangdm.ager the problem with sentinel hub plugin for QGIS is that a sentinel hub instance id is necessary to get data. I’ve checked my account and says it has exired and need to upgrade. Of course is an interesting service, but at this moment this is the only task I’d need for the service, so it is not worth to pay for just one task. Perhaps, if in the future I need more frequent access and data, would be different :slight_smile:

See also @gmilcinski one example of the results of one day in which I used NDWI for determining flooded parcels, using a threshold of -0.07 (pixels >-0.07 are considered flooded areas). As you can see, looks very precise. Some parcels in the center of the image look partially flooded, and they’re also identified. So far, so good!. I did the same with other images, and not always is so accurate. So I am also checking moisture index images to double-check. E.g.: If a pixel is considered flooded according to NDWI procedure but the moisture index says is not wet, then, I check the values. The result is that I need to slightly modify the threshold, moving in a range between -0.07 to 0.07. I am still in the process, but results look quite accurate.

Thanks a lot and more news in the coming future :wink:


Thank you very much Alex and Grega for your very interesting contributions.


Hi @gmilcinski , @juangdm.ager and others who could be interested. Just a short note to tell you that I have finished the work for which I used the NDWI values to identify flooded areas. The challenge was to first find an appropiate threshold to differenciate areas mixed with vegetation (mainly rice fields) and see where and when some areas were flooded intentionally (due to agricultural practices). In the following image you can see that using 0 as threshold, some areas that were obviously flooded were not identifed (image 2). So, after some tests, I found that using a threshold of -0.07 did work very well (see image 3):

. See this animation where one can clearly see where and when parcels were flooded. It was also possible to identify, along with local precipitation data and Digital Elevation Models, if the floodings were due to agricultural practices or intense rainfall. This work helps for example, to identify potential areas for biodiversity protection, flood prone areas, and also monitor reservoir water levels. In general, it helps to improve water management in different aspects:

Additionally, in this work I carried out another analysis to identify irrigated parcels during dry months, in an area of the basin where groundwater is the only irrigation source. I did this using another index, in this case Normalized Difference Moisture Index (NDMI). Thanks @juangdm.ager for helping me developing the index in this work. It can really help to identify efficiency of irrigation and crop water stress, as well as improve water allocation and control water use and illegal water abstraction. See in this image how through using and processing this index it is possible to identify parcels that are considered to be having irrigation at certain point in time. The image is from a date after about 100 days with almost no rain, so areas in blue are clearly irrigated parcels:

If someone is interested in learning more about this work, let me know and I could share the extended report. (It is in Spanish, but with Ex. summary in English).
Thanks a lot for you help, looking forward to do more work like this and help others.

That looks great, thanks for sharing it.
Would you be willing/interesting to share the NDMI in the Custom script repository?

Hola Grega

I am not an expert, I think actually NDMI is Moisture Index: (B08-B11) / (B08 + B11). Sometimes it’s called that

Thank you very much for your contributions Alex.

Yes, as @juangdm.ager says, NDMI is a Moisture Index, but in this case what we did is to do this Moisture Index to determine if irrigation has taken place in areas where there has been no recent rain events, and the land uses are known, sometimes even the crops grown per parcel. If NDMI is above 0, depending on the land and canopy cover, it is possible to determine if irrigation has taken place. Some of them showed high levels of NDMI in summer moths after several weeks without rain. The only source of irrigation water was from an aquifer below. Some of the parcels do have water concessions and others not, so it was possible to identify illegal water use. On the other hand, it was possible to identify if a parcel in which the crop is known (e.g. citrus crops) irrigation is being effective or not during the crucial growing season in summer, as it is possible to find if some parts of the farm are being under or over irrigated. The uses of thins index can be multiple.

In EO browser, “Moisture Idex” is the combination of bands (B8A-B11) / (B8A + B11). After checking this index and other sources like this and Sentinel Playground, and the logic used from this article from This article., the decision was to use (B08-B11) / (B08 + B11).

In any case, I already uploaded the NDMI sources and explanations tu the Custom Script repository, please check if I did it right or wrong please.

Thanks a lot!