I'm looking at the Hansen forest loss v1.5 data in Earth Engine. According to the Hansen documentation,

In addition, to reduce confusion, beginning with version 1.4 we are no longer releasing loss as a separate layer from lossyear. Loss as previously releaed corresponds to nonzero values of loss year. (link)

If I understand correctly, this means that the loss band is deprecated, and only the lossyear band should be used. However, the Hansen v1.5 data in Earth Engine still has a loss band (link). Furthermore, there are pixels where the loss band is equal to 1 (indicating a loss has occurred), but the lossyear band is equal to 0 (indicating that no loss has occurred) (see example script in Earth Engine).

What is the cause of this discrepancy? In the pixels where loss == 1, but lossyear == 0, are those pixels that were classified as loss in the last year that Hansen used the loss pixel, but in subsequent versions have not been classified as loss? It seems like this might be the case, as version of Hansen prior to 1.4 do not seem to have this discrepancy (see example script).

Possibly related: there appears to be a typo in the Earth Engine documentation for the Hansen dataset. According to the EE docs, forest loss is represented by the lossyear band, and is "Encoded as either 0 (no loss) or else a value in the range 1–16, representing loss detected primarily in the year 2001–2017, respectively" (link). I don't think I'm totally losing my mind: there are sixteen numbers in the range 1-16, but 17 numbers in the range 2001-2017. (Right?)

I'm inclined to assume that the loss band is legacy and only lossyear should be used, except that the Hansen forest loss Earth Engine app and an example in the Earth Engine code playground both treat a 0 lossyear value as a loss in the year 2000, instead of no loss, as described by the Hansen documentation. I'm pretty sure the EE app was produced by the UMD team, making things more unclear. (EE App, EE example script).

1 Answer 1


This question is out of date, and not sure if who asked still needs the answer, but I'll do it for anyone else who may have the same doubt.

I think the assumption is not correct, at least not in the example area the question focuses. I didn't find any area where this statement is correct:

there are pixels where the loss band is equal to 1 (indicating a loss has occurred), but the lossyear band is equal to 0 (indicating that no loss has occurred)

in the provided example script you can see "white" pixels because of the scale when zooming, due to how Earth Engine works (basically, EE computes the layers at zoom scale for visualization/speed purposes). But if you check closely, you'll see that at Hansen scale, the statement is not correct. Here a code to verify:

var geometry = ee.Geometry.Polygon(
        [[[13.981122252257663, 56.61429838792234],
          [13.981122252257663, 56.35344705198171],
          [14.557904478820163, 56.35344705198171],
          [14.557904478820163, 56.61429838792234]]], null, false);
var hansen = ee.Image('UMD/hansen/global_forest_change_2017_v1_5');

var loss = hansen.select('loss')
var lossyear = hansen.select('lossyear').eq(0)

Map.addLayer(hansen, {}, 'Hansen', false)

var lossButNoLossyear = hansen.select('loss').eq(1).and(hansen.select('lossyear').eq(0))
Map.addLayer(lossButNoLossyear, {}, 'loss but no loss year')

var getdata = function(scale) {
  var data = lossButNoLossyear.reduceRegion({
    reducer: ee.Reducer.frequencyHistogram(),
    geometry: geometry,
    scale: scale
  return data.get('loss')

print('152 (spatial resolution at zoom level of 10', getdata(152))
print('30 (Hansen spatial resolution)', getdata(30))

link to script

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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