A question about the unit in SDR and NDR model

Recently, I am confused about the unit in SDR and NDR model. The output files in SDR model include rkls_[Suffix].tif, sed_export_[Suffix].tif and usle_[Suffix].tif, and the unit of these raster files are all tons/pixel as the description in Interpreting Results. But the unit in the equations is tons/ha. So what is the difference and how is this unit transformed? If the pixel in data is 30m×30m, should the unit in output raster files be tons/900m2 as the description in Interpreting Results (tons/pixel)? And if the unit of the raster is tons/ha, how is sed_export in watershed_results_sdr_[Suffix].shp summed as tons/watershed. Same question exsits in NDR model.
I think this question is vital to many researchers study.
Thanks for your reply!

Hello @Prime -

As far as I know, the model translates the USLE and SDR equation values to a value of tons/pixel/year (which is output by the model for usle.tif, sed_export.tif and the watershed results), by adjusting for pixel size. @rich, @jdouglass, can one of you please verify this? Assuming that’s the case, I’ll update the User Guide with this clarification.

~ Stacie

Hello @swolny

Thank you for sovling my puzzle.My input data is 30m×30m (the area of pixel is 900m2), so the unit of sed_export.tif is tons/900m2/year according to your solution. Similarly, the unit of n§_export.tif in NDR model is kg/900m2/year. I can do my research better if this is verified again by two other experts (@rich and @jdouglass).

Thank you very much for your help!


Hello @Prime,

I have the same question than you, about the units of SDR. Because my output rasters have the pixel size 30m x30m, same as DEM, therefore,the units should be tons/pixel/year = tons/900m2/year.

But, when I convert this values to tons/ha/year (to be coherent with other papers) it gives me unrealistic values of soil loss, comparing it with the official JRC data, while the original outputs in tons/pixel/year has very close values to the official data (that is in tons/ha/year), making it easy to do a statistical comparison.

So, is it possible that in fact, the model converts automatically tons/pixel/year to tons/ha/year, for any pixel size? And, no further conversion is needed?

@swolny it would be great if we could confirm this, to better understand the model.

Thank you!

Really this is a critical question to resolve. I had assumed the values were tons/hectare, but now I’m not sure, and that makes me question all the results from these models.

Hi all,

i did a SDR analysis with a 10 meter DEM raster and compared the results of the ‘usle.tif’ with another data set witch shows erosion in tons / ha. I realized that the SDR results were smaller by factor 100 compared to the other data set. First i thought there was a mistake in my input data but there wasn’t. In the SDR source code (sdr.py, version 3.7) the ‘rkls.tif’ (= usle.tif without factor C and P) is calculated with:

    rkls[valid_mask] = (
        ls_factor[valid_mask] * erosivity[valid_mask] *
        erodibility[valid_mask] * cell_area_ha)

and ‘cell_area_ha’ is calculated with:

cell_size = abs(
cell_area_ha = cell_size**2 / 10000.0

So the SDR model uses the cell size (pixel size in meter) of the ‘ls.tif’ (= based on DEM) to calculate the final output of ‘usle.tif’ in tons / pixel. In my approach a 10 meter DEM leads to a reduction of the USLE output in tons / ha by multiplying: 10² / 10000.0 = 0.01.
If you want the model to calculate a ‘usle.tif’ with unit tons / ha instead of tons / pixel one option would be to modify the source code in ‘sdr.py’ by deleting ‘* cell_area_ha’ in expression:

    rkls[valid_mask] = (
        ls_factor[valid_mask] * erosivity[valid_mask] *
        erodibility[valid_mask] * cell_area_ha)

Perhaps someone can confirm this procedure, as I have little experience myself.

Hey Everyone,

Sorry this never got officially sorted out. From my quick napkin math we have:

INPUT - Unit
ls_factor - unitless
erosivity - MJ * mm / (ha * h)
erodibility - ton * ha * h / (MJ * ha * mm)
cell_area_ha - ha

So, erosivity and erodibility cancel to: ton / ha
And multiplying by cell_area_ha leaves us with ton.
Since we’re operating on a pixel we have ton/pixel.

Let me know if my reduction doesn’t make sense in this context.

Though we provide pixel level output, the equations used here are meant for the watershed and sub-watershed scale. So certainly pixel level output should not be used as a definitive representation of truth.

I’m curious if folks are seeing huge differences at the watershed level then what they expect?



Hello, how did you resolve your problem. I’m facing the same problem, i want to convert the results from tons/pixel/year to tons/ha/year, please help.

Hi Nametso,
i suggested this:


Hi all,
I would not recommend modifying the source code unless there isn’t another way. It’s easy to accidentally change something and get unexpected results, and you are no longer running the official, tested, documented version of InVEST.

Converting units is easy enough to do in GIS software and you do not run the risk of modifying something unintentional. For instance, if your pixel size is 30m, the area is 900m^2. One hectare is 10,000m^2. So you have 10,000/900 = 11.111 pixels/hectare. You can multiply your raster outputs from InVEST by this conversion factor in QGIS using the Raster Calculator tool: @layer * 11.111
I hope that helps!


@Marvin @esoth Thank you for your response :slight_smile: